{"openapi":"3.0.0","paths":{"/backstage/mira-widget/lead":{"post":{"operationId":"lead","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetLeadDto"}}}},"responses":{"201":{"description":""}},"tags":["MiraWidgetLead"]}},"/crm/pipelines":{"get":{"operationId":"list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PipelineDto"}}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"post":{"operationId":"create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePipelineDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/pipelines/default":{"get":{"operationId":"getDefault","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/pipelines/{id}":{"get":{"operationId":"get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"patch":{"operationId":"update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePipelineDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"delete":{"operationId":"delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/pipelines/{pipelineId}/stages":{"post":{"operationId":"addStage","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePipelineStageDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineStageDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/pipelines/{pipelineId}/stages/reorder":{"patch":{"operationId":"reorderStages","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderStagesDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStageDto"}}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/pipelines/{pipelineId}/stages/{stageId}":{"patch":{"operationId":"updateStage","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}},{"name":"stageId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePipelineStageDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineStageDto"}}}}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"delete":{"operationId":"deleteStage","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}},{"name":"stageId","required":true,"in":"path","schema":{"type":"string"}},{"name":"moveToStageId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Pipelines"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals":{"post":{"operationId":"create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDealDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"get":{"operationId":"findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"pipelineId","required":false,"in":"query","schema":{"format":"uuid","type":"string"}},{"name":"stageId","required":false,"in":"query","schema":{"format":"uuid","type":"string"}},{"name":"crmCompanyId","required":false,"in":"query","schema":{"format":"uuid","type":"string"}},{"name":"contactId","required":false,"in":"query","schema":{"format":"uuid","type":"string"}},{"name":"ownerId","required":false,"in":"query","schema":{"type":"string"}},{"name":"isOpen","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"isWon","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"isLost","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"$ref":"#/components/schemas/Object"}},{"name":"sortOrder","required":false,"in":"query","schema":{"$ref":"#/components/schemas/Object"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealListDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/summary":{"get":{"operationId":"getSummary","parameters":[{"name":"ownerId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealSummaryDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/limits":{"get":{"operationId":"getLimits","parameters":[],"responses":{"200":{"description":""}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/pipeline/{pipelineId}":{"get":{"operationId":"getByPipeline","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/pipeline/{pipelineId}/grouped":{"get":{"operationId":"getByPipelineGrouped","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Optimized endpoint for kanban view - returns deals grouped by stage in a single request.\nThis eliminates the need for multiple paginated calls when loading the kanban board.","tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}":{"get":{"operationId":"findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"patch":{"operationId":"update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDealDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"delete":{"operationId":"delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/won":{"patch":{"operationId":"markAsWon","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkDealAsWonDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/lost":{"patch":{"operationId":"markAsLost","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkDealAsLostDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/reopen":{"patch":{"operationId":"reopen","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReopenDealDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/contacts":{"get":{"operationId":"getContacts","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DealContactDto"}}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"post":{"operationId":"addContact","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDealContactDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealContactDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/contacts/{dealContactId}":{"patch":{"operationId":"updateContact","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"dealContactId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDealContactDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealContactDto"}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]},"delete":{"operationId":"removeContact","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"dealContactId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/activity":{"get":{"operationId":"getActivity","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DealActivityDto"}}}}}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/crm/deals/{id}/appointments":{"get":{"operationId":"getAppointments","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["CRM Deals"],"security":[{"ApiKey":[]},{"JWT":[]},{"ApiUserHeader":[]}]}},"/availability":{"get":{"operationId":"getAllAvailabilities","parameters":[{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]},"post":{"operationId":"createAvailability","parameters":[{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAvailabilityDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/many":{"get":{"operationId":"getManyAvailabilities","parameters":[{"name":"userIds","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityPerUserDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get many user's availability at once","tags":["availability"]}},"/availability/bulk-holidays":{"post":{"operationId":"bulkHolidayExceptions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkHolidayExceptionsDto"}}}},"responses":{"201":{"description":"Holidays applied to multiple users"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/{id}/meeting-types":{"get":{"operationId":"getMeetingTypesForAvailability","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/{id}/apply-to-users":{"post":{"operationId":"applyAvailabilityToUsers","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyAvailabilityToUsersDto"}}}},"responses":{"201":{"description":"Availability applied to users"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/{id}":{"get":{"operationId":"getAvailabilityById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]},"patch":{"operationId":"updateAvailability","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAvailabilityDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]},"delete":{"operationId":"deleteAvailability","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/default/{availabilityId}":{"post":{"operationId":"setDefaultAvailability","parameters":[{"name":"availabilityId","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability/{id}/holiday-exceptions":{"patch":{"operationId":"createHolidayExpections","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHolidayExpectionsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"tags":["availability"]}},"/availability-exception/user":{"post":{"operationId":"createUserException","parameters":[{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAvailabilityExceptionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create user availability exception","tags":["availability-exception"]},"get":{"operationId":"getUserExceptions","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Gets user availability exceptions","tags":["availability-exception"]}},"/availability-exception/{id}":{"put":{"operationId":"updateAvailabilityException","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAvailabilityExceptionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update user availability exception","tags":["availability-exception"]},"delete":{"operationId":"deleteAvailabilityException","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete availability exception","tags":["availability-exception"]}},"/availability-exception/company":{"post":{"operationId":"createCompanyException","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAvailabilityExceptionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create company availability exception","tags":["availability-exception"]},"get":{"operationId":"getCompanyExceptions","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Gets company availability exceptions","tags":["availability-exception"]}},"/v4/meeting-type":{"post":{"description":"Creates a new meeting type with specified duration, availability settings, and booking options.","operationId":"createMeetingType","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMeetingTypeV4Dto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create meeting type","tags":["Meeting Type V4"]},"get":{"description":"Retrieves multiple meeting types based on domain filtering. Defaults to user's own meeting types when no domain is specified.","operationId":"getMeetingTypes","parameters":[{"name":"domain","required":false,"in":"query","description":"Domain to filter meeting types by. Defaults to \"me\"","schema":{"$ref":"#/components/schemas/MeetingTypeDomain"}},{"name":"id","required":false,"in":"query","description":"Optional id to be used in combination with domain (required for user, group, workspace domains)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}}},"default":{"description":"Array of meeting types matching the specified criteria","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get meeting types","tags":["Meeting Type V4"]}},"/v4/meeting-type/{id}":{"get":{"description":"Retrieves detailed information about a meeting type including duration, availability settings, and booking configuration.","operationId":"getMeetingType","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the meeting type","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get meeting type information","tags":["Meeting Type V4"]},"patch":{"description":"Updates an existing meeting type with partial data. All fields are optional and only provided fields will be updated.","operationId":"updateMeetingType","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the meeting type to update","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeetingTypeV4Dto"}}}},"responses":{"200":{"description":"Meeting type updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}},"400":{"description":"Invalid input data or validation error"},"403":{"description":"User does not have permission to update this meeting type"},"404":{"description":"Meeting type not found"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update meeting type","tags":["Meeting Type V4"]},"delete":{"description":"Soft deletes a meeting type. Optionally also deletes the associated availability if not shared with other meeting types.","operationId":"deleteMeetingType","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the meeting type to delete","schema":{"type":"string"}},{"name":"deleteAvailability","required":false,"in":"query","description":"Also delete the associated availability. Fails if the availability is shared with other meeting types.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Meeting type deleted successfully"},"400":{"description":"Cannot delete availability - user must have at least one availability"},"403":{"description":"User does not have permission to delete this meeting type"},"404":{"description":"Meeting type not found"},"409":{"description":"Cannot delete availability - it is used by other meeting types"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete meeting type","tags":["Meeting Type V4"]}},"/v4/booking-availability":{"get":{"operationId":"getBookingAvailability","parameters":[{"name":"meetingTypeId","required":true,"in":"query","schema":{"type":"string"}},{"name":"meetingDuration","required":false,"in":"query","schema":{"type":"number"}},{"name":"start","required":true,"in":"query","schema":{"type":"string"}},{"name":"end","required":true,"in":"query","schema":{"type":"string"}},{"name":"hostIds","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"queueId","required":false,"in":"query","description":"Queue ID of meeting type for hosts in round robin","schema":{"type":"string"}},{"name":"existingAppointmentId","required":false,"in":"query","description":"Appointment ID of previous booking for rescheduling","schema":{"type":"string"}},{"name":"calculationMethod","required":false,"in":"query","schema":{"$ref":"#/components/schemas/AvailabilityCalculationMethod"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"hideGroupAppointments","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"skipEarliestBookingCalculation","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"troubleshoot","required":false,"in":"query","description":"Get blocked timeslots with available slots for diagnostics","schema":{"default":false,"type":"boolean"}},{"name":"refreshCache","required":false,"in":"query","description":"Force cache refresh (skip read, write result).\nUsed after slot-occupied error to fetch fresh availability.","schema":{"type":"boolean"}},{"name":"resourceChannelIds","required":false,"in":"query","description":"Ids of the resource channel entity","schema":{"type":"array","items":{"type":"string"}}},{"name":"channel","required":false,"in":"query","description":"Selected channel for per-channel availability lookup","schema":{"$ref":"#/components/schemas/MeetingTypeChannel"}},{"name":"attendeeEmail","required":false,"in":"query","description":"Booker email used for account-owner matching on round-robin\nmeeting types. When matching is enabled and an owner resolves\nto one of the meeting type's eligible hosts, availability is\nnarrowed to that host. Ignored when the meeting type does not\nhave account-owner matching enabled.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingAvailabilityResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingAvailabilityResponseDto"}}}}},"summary":"Get booking availability for a meeting type","tags":["Booking Availability V4"]}},"/v4/booking-availability/user/{id}/timeframe":{"get":{"operationId":"getUserAvailability","parameters":[{"name":"id","required":true,"in":"path","description":"User ID","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Start date and time in ISO format","schema":{"type":"string"}},{"name":"end","required":true,"in":"query","description":"End date and time in ISO format","schema":{"type":"string"}},{"name":"meetingTypeId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAvailabilityResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAvailabilityResponseDto"}}}}},"summary":"Get user availability for a specific timeframe","tags":["Booking Availability V4"]}},"/v4/queue/meeting-type/{meetingTypeId}":{"patch":{"description":"Update user assignments or capacities for a queue associated with a meeting type","operationId":"updateQueue","parameters":[{"name":"meetingTypeId","required":true,"in":"path","description":"ID of the meeting type","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateQueueDto"}}}},"responses":{"200":{"description":"Queue updated successfully"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update queue for a meeting type","tags":["Queue V4"]}},"/v4/queue/workspace/{workspaceId}":{"get":{"description":"Retrieve all queues associated with a specific workspace","operationId":"getWorkspaceQueues","parameters":[{"name":"workspaceId","required":true,"in":"path","description":"ID of the workspace","schema":{"type":"string"}}],"responses":{"200":{"description":"Queues retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/QueueResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get all queues for a workspace","tags":["Queue V4"]}},"/v4/queue/company":{"get":{"description":"Retrieve all queues associated with the current user's company","operationId":"getCompanyQueues","parameters":[],"responses":{"200":{"description":"Company queues retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/QueueResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get all queues for a company","tags":["Queue V4"]}},"/v4/queue/{queueId}":{"get":{"description":"Retrieve a specific queue with all its relations","operationId":"getQueue","parameters":[{"name":"queueId","required":true,"in":"path","description":"ID of the queue","schema":{"type":"string"}}],"responses":{"200":{"description":"Queue retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueueResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get queue by ID","tags":["Queue V4"]}},"/v4/queue/{queueId}/next":{"get":{"description":"Retrieve the next available hosts from the queue rotation","operationId":"getNextHost","parameters":[{"name":"queueId","required":true,"in":"path","description":"ID of the queue","schema":{"type":"string"}}],"responses":{"200":{"description":"Next queue hosts retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NextQueueHostsResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get next available hosts from queue","tags":["Queue V4"]}},"/v4/queue-user-group":{"post":{"operationId":"createGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserGroupDto"}}}},"responses":{"201":{"description":"User group created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueueUserGroupResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create a new user group","tags":["Queue User Group V4"]}},"/v4/queue-user-group/{groupId}":{"patch":{"operationId":"updateGroup","parameters":[{"name":"groupId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserGroupDto"}}}},"responses":{"200":{"description":"User group updated successfully"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update an existing user group","tags":["Queue User Group V4"]},"delete":{"operationId":"deleteGroup","parameters":[{"name":"groupId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"204":{"description":"User group deleted successfully"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete a user group","tags":["Queue User Group V4"]}},"/v4/meeting-type-template/create":{"post":{"operationId":"createMeetingTypeTemplate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMeetingTypeTemplateV4Dto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create a new meeting type template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/assign/{templateId}":{"post":{"operationId":"assignHost","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTemplateHost"}}}},"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Assign host to meeting type template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/assign-bulk/{templateId}":{"post":{"operationId":"assignHostBulk","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTemplateHostBulk"}}}},"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Assign multiple hosts to meeting type template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/unassign/{templateId}":{"post":{"operationId":"unassignHost","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Unassign host from meeting type template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/all":{"get":{"operationId":"getAllMeetingTypeTemplates","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}}},"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get all meeting type templates for user","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/{id}":{"get":{"operationId":"getMeetingTypeTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeTemplateResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get meeting type template by ID","tags":["Meeting Type Template V4"]},"patch":{"operationId":"updateMeetingTypeTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeetingTypeTemplateV4Dto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update a meeting type template","tags":["Meeting Type Template V4"]},"delete":{"operationId":"deleteMeetingTypeTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete a meeting type template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/users/{templateId}":{"get":{"operationId":"getAssignedUsers","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateMeetingTypeInfoDto"}}}}},"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateMeetingTypeInfoDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get meeting types created from this template","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/assign-workspace/{templateId}":{"post":{"operationId":"assignWorkspace","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTemplateWorkspace"}}}},"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Assign team template to workspace","tags":["Meeting Type Template V4"]}},"/v4/meeting-type-template/workspaces/{templateId}":{"get":{"operationId":"getAssignedWorkspaces","parameters":[{"name":"templateId","required":true,"in":"path","description":"Template ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateWorkspaceInfoDto"}}}}},"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateWorkspaceInfoDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get workspaces assigned to this template","tags":["Meeting Type Template V4"]}},"/v4/one-time-booking-link/create/{meetingTypeId}":{"post":{"operationId":"createOneTimeLink","parameters":[{"name":"meetingTypeId","required":true,"in":"path","description":"Meeting type ID","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OneTimeBookingLinkResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create a one-time booking link for a meeting type","tags":["One Time Booking Link V4"]}},"/v4/provisional-booking/paginated":{"get":{"description":"Retrieves a paginated list of provisional bookings based on the provided criteria.","operationId":"getPaginatedProvisionalBookings","parameters":[{"name":"page","required":true,"in":"query","description":"Page number for pagination","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","description":"Number of items per page","schema":{"type":"number"}},{"name":"all","required":false,"in":"query","description":"Fetch all bookings in company, admin only","schema":{"type":"boolean"}},{"name":"userId","required":false,"in":"query","description":"Fetch bookings by userId, admin only","schema":{"type":"string"}},{"name":"meetingTypeId","required":false,"in":"query","description":"Fetch bookings by meetingTypeId, admin only","schema":{"type":"string"}},{"name":"workspaceId","required":false,"in":"query","description":"Restrict bookings to hosts in a workspace","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by status","schema":{"type":"string","enum":["pending","confirmed","expired","declined_by_host"]}},{"name":"type","required":false,"in":"query","description":"Filter by type (doubleOptIn = awaiting attendee, requireHostConfirmation = needs host action)","schema":{"type":"string","enum":["doubleOptIn","requireHostConfirmation"]}}],"responses":{"200":{"description":"Successfully retrieved paginated provisional bookings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProvisionalBookingsResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get paginated provisional bookings","tags":["Provisional Booking V4"]}},"/v4/provisional-booking/{id}":{"delete":{"description":"Soft deletes a provisional booking by ID","operationId":"deleteProvisionalBookingById","parameters":[{"name":"id","required":true,"in":"path","description":"Provisional booking ID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete provisional booking","tags":["Provisional Booking V4"]}},"/v4/provisional-booking/{id}/decline":{"post":{"description":"Declines a provisional booking request and notifies the attendee","operationId":"declineProvisionalBooking","parameters":[{"name":"id","required":true,"in":"path","description":"Provisional booking ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeclineProvisionalBookingDto"}}}},"responses":{"200":{"description":"Successfully declined provisional booking"},"201":{"description":""},"400":{"description":"Booking request has already been processed"},"403":{"description":"User is not authorized to decline this booking request"},"404":{"description":"Provisional booking not found"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Decline provisional booking","tags":["Provisional Booking V4"]}},"/v4/handoff/appointment":{"post":{"description":"Changes the host of an appointment to another user, queue, or queue group.","operationId":"handoffAppointment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoffAppointmentDto"}}}},"responses":{"200":{"description":"Appointment successfully handed off"},"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Handoff appointment to another user or queue","tags":["Handoff V4"]}},"/v4/handoff/available-handoffs":{"get":{"description":"Retrieves available users or queues that can receive a handoff for the specified criteria.","operationId":"getAvailableHandoffs","parameters":[{"name":"isOnline","required":false,"in":"query","description":"Filter for online users only","schema":{"type":"boolean"}},{"name":"channelId","required":false,"in":"query","description":"Channel ID for filtering handoffs","schema":{"type":"string"}},{"name":"appointmentId","required":false,"in":"query","description":"Appointment ID to get handoffs for","schema":{"type":"string"}},{"name":"showAll","required":false,"in":"query","description":"Include all company users even when the appointment belongs to a workspace","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Successfully retrieved available handoff options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableHandoffsDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get available handoff options","tags":["Handoff V4"]}},"/v4/handoff/bulk":{"post":{"description":"Hands off multiple appointments from specified users within a time period to a target user.","operationId":"bulkHandoff","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkHandoffDto"}}}},"responses":{"200":{"description":"Bulk handoff completed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkHandoffResponseDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkHandoffResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Bulk handoff appointments","tags":["Handoff V4"]}},"/v4/booking-link/group":{"post":{"operationId":"createGroupBookingLink","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupBookingLinkDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupBookingLinkResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupBookingLinkResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create a group booking link","tags":["Booking Link V4"]}},"/v4/booking-link/group/{groupBookingLinkId}":{"patch":{"operationId":"updateGroupBookingLink","parameters":[{"name":"groupBookingLinkId","required":true,"in":"path","description":"Group booking link ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGroupBookingLinkDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update a group booking link","tags":["Booking Link V4"]},"delete":{"operationId":"deleteGroupBookingLink","parameters":[{"name":"groupBookingLinkId","required":true,"in":"path","description":"Group booking link ID","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete a group booking link","tags":["Booking Link V4"]}},"/v4/booking-link/group/workspace/{workspaceId}":{"get":{"operationId":"getWorkspaceGroupBookingLinks","parameters":[{"name":"workspaceId","required":true,"in":"path","description":"Workspace ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupBookingLinkResponseDto"}}}}},"default":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupBookingLinkResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get group booking links of a workspace","tags":["Booking Link V4"]}},"/v4/booking-link":{"get":{"operationId":"getBookingLinks","parameters":[{"name":"workspaceId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBookingLinksResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBookingLinksResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get booking links for specified workspace or user workspace","tags":["Booking Link V4"]}},"/v4/booking-link/all":{"get":{"operationId":"getAllBookingLinks","parameters":[{"name":"domain","required":true,"in":"query","schema":{"type":"string"}},{"name":"id","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBookingLinksResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBookingLinksResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get all booking links with scopes","tags":["Booking Link V4"]}},"/v4/booking-link/personal-link/assigned":{"get":{"operationId":"getAssignedPersonalBookingLinkMeetingType","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingTypeResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get meeting types assigned to requesters personal booking link","tags":["Booking Link V4"]}},"/v4/booking-link/personal-link/{companySlug}/{userSlug}":{"get":{"operationId":"getPersonalBookingLinkPage","parameters":[{"name":"companySlug","required":true,"in":"path","description":"Company slug","schema":{"type":"string"}},{"name":"userSlug","required":true,"in":"path","description":"User slug","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponseDto"}}}}},"summary":"Get personal booking link page data","tags":["Booking Link V4"]}},"/v4/booking-link/company/{companySlug}":{"get":{"operationId":"getCompanyPage","parameters":[{"name":"companySlug","required":true,"in":"path","description":"Company slug","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyBookingPageResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyBookingPageResponseDto"}}}}},"summary":"Get company booking link page data","tags":["Booking Link V4"]}},"/v4/booking-link/personal-page/link":{"get":{"operationId":"getPersonalPageLink","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}},"default":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get a link for personal page","tags":["Booking Link V4"]}},"/v4/booking-link/personal-page/v2/{userSlug}":{"get":{"operationId":"getPersonalPage","parameters":[{"name":"userSlug","required":true,"in":"path","description":"User slug","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalBookingPageResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalBookingPageResponseDto"}}}}},"summary":"Get personal page data","tags":["Booking Link V4"]}},"/v4/booking-link/user/{userId}/meetingType/{meetingTypeId}":{"get":{"operationId":"getBookingLink","parameters":[{"name":"userId","required":true,"in":"path","description":"User ID","schema":{"type":"string"}},{"name":"meetingTypeId","required":true,"in":"path","description":"Meeting type ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLinkResponseDto"}}}}},"summary":"Get booking link for specified meeting type","tags":["Booking Link V4"]}},"/v4/booking":{"post":{"description":"Books an appointment with a specified host for a given meeting type and time slot. Returns appointment confirmation details.","operationId":"bookAppointment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponseDto"}}}}},"summary":"Create appointment booking","tags":["Booking V4"]}},"/v4/attendee/no-show/{attendeeId}":{"post":{"description":"Marks a specific attendee as no-show for tracking and reporting purposes","operationId":"markAttendeeAsNoShow","parameters":[{"name":"attendeeId","required":true,"in":"path","description":"The unique identifier of the attendee to mark as no-show","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Mark attendee as no-show","tags":["Attendee V4"]}},"/v4/attendee/quick-mail":{"post":{"description":"Sends a quick email message to a specific attendee. Rate limited to 5 per 5 minutes.","operationId":"sendQuickMail","parameters":[],"requestBody":{"required":true,"description":"Email details including attendee ID, title and content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickMailDto"}}}},"responses":{"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Send quick email to attendee","tags":["Attendee V4"]}},"/v4/attendee/{attendeeId}/notes":{"patch":{"description":"Allows host to update attendee notes. Useful for manual adjustments when CRM sync fails or for adding additional information.","operationId":"updateNotes","parameters":[{"name":"attendeeId","required":true,"in":"path","description":"The unique identifier of the attendee whose notes to update","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Key-value pairs of notes to update. Must have the same keys as existing notes.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"example":{"company":"New Company Name","phone":"+1234567890"}}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update attendee notes","tags":["Attendee V4"]}},"/v4/appointment/public/{appointmentId}":{"get":{"description":"Retrieves public appointment information that can be accessed with or without authentication","operationId":"getPublicAppointment","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}},{"name":"secret","required":false,"in":"query","description":"Optional secret key for accessing appointment details","schema":{"type":"string"}}],"responses":{"200":{"description":"Public appointment details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAppointment"}}}}},"summary":"Get public appointment details","tags":["Appointment V4"]}},"/v4/appointment/paginated":{"get":{"description":"Retrieves appointments with pagination support for the authenticated user","operationId":"getPaginatedAppointments","parameters":[{"name":"sortBy","required":false,"in":"query","schema":{"$ref":"#/components/schemas/AppointmentSortBy"}},{"name":"sortDirection","required":false,"in":"query","schema":{"$ref":"#/components/schemas/SortDirection"}},{"name":"page","required":true,"in":"query","description":"Page number (0-indexed). Use 0 for the first page.","schema":{"minimum":0,"example":0,"type":"number"}},{"name":"pageSize","required":true,"in":"query","description":"Number of items per page","schema":{"minimum":1,"maximum":100,"example":20,"type":"number"}},{"name":"channel","required":false,"in":"query","schema":{"$ref":"#/components/schemas/MeetingTypeChannel"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"workspaceId","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Fetch all bookings in company, admin only","schema":{"type":"boolean"}},{"name":"userId","required":false,"in":"query","description":"Fetch bookings by userId, admin only","schema":{"type":"string"}},{"name":"meetingTypeId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated appointments retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAppointmentsResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get paginated appointments","tags":["Appointment V4"]}},"/v4/appointment/{appointmentId}":{"delete":{"description":"Deletes a specific appointment by ID","operationId":"deleteAppointmentById","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment to delete","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete appointment","tags":["Appointment V4"]}},"/v4/appointment/today":{"get":{"description":"Retrieves all appointments scheduled for today for the authenticated user","operationId":"getTodayAppointments","parameters":[{"name":"timezone","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Today's appointments retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppointmentResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get today's appointments","tags":["Appointment V4"]}},"/v4/appointment/current":{"get":{"description":"Retrieves the currently active appointment for the authenticated user","operationId":"getCurrentAppointment","parameters":[],"responses":{"200":{"description":"Current appointment retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get current appointment","tags":["Appointment V4"]}},"/v4/appointment/{id}":{"get":{"description":"Retrieves a specific appointment by ID with full details including attendees and hosts","operationId":"getAppointmentById","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}}],"responses":{"200":{"description":"Appointment details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get appointment by ID","tags":["Appointment V4"]}},"/v4/appointment/{appointmentId}/guest":{"patch":{"description":"Adds additional guest email addresses to an appointment's attendee list","operationId":"addGuestEmail","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Guest email addresses to add to the appointment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddGuestEmailsDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Add guest emails to appointment","tags":["Appointment V4"]},"delete":{"description":"Removes a guest email address from an appointment's attendee list","operationId":"removeGuestEmail","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Guest email address to remove from the appointment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveGuestEmailDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Remove guest email from appointment","tags":["Appointment V4"]}},"/v4/appointment/{appointmentId}/notes":{"patch":{"description":"Updates or adds notes to a specific appointment","operationId":"updateNotes","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Notes to update for the appointment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNotesDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update appointment notes","tags":["Appointment V4"]}},"/v4/appointment/{appointmentId}/transcription":{"patch":{"description":"Updates the meeting transcription and/or AI-generated summary for an appointment. Both fields accept markdown-formatted text. Set a field to `null` to clear it. Omit a field to leave it unchanged.\n\nThis endpoint is designed for integrations with transcription services, AI meeting assistants, or any tool that produces meeting records.","operationId":"updateTranscription","parameters":[{"name":"appointmentId","required":true,"in":"path","description":"The unique identifier of the appointment","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Transcription and/or summary content in markdown format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTranscriptionDto"}}}},"responses":{"200":{"description":"Transcription updated successfully"},"403":{"description":"User does not have access to this appointment"},"404":{"description":"Appointment not found"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update meeting transcription and summary","tags":["Appointment V4"]}},"/v4/appointment/{id}/cancel":{"post":{"description":"Cancels an appointment as the host or admin. For group bookings, specify `attendeeId` to remove a single attendee, or set `cancelAll: true` to cancel the entire appointment \u2014 omitting both returns a 400 error to prevent accidental full cancellation.\n\n**Side effects:** Sends cancellation emails to all participants, syncs calendar events, updates CRM integrations, and fires `booking_cancelled` webhook.\n\n**Series cancellation:** Set `cancelEntireSeries: true` to cancel all future occurrences of a recurring appointment.","operationId":"cancelAppointment","parameters":[{"name":"id","required":true,"in":"path","description":"Appointment ID (UUID)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelAppointmentDto"}}}},"responses":{"200":{"description":"The cancelled appointment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponseDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppointmentResponseDto"}}}},"400":{"description":"Group booking requires explicit intent: provide `attendeeId` or set `cancelAll: true`"},"403":{"description":"User does not have access to this appointment"},"404":{"description":"Appointment not found"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Cancel an appointment","tags":["Appointment V4"]}},"/v4/appointment/{id}/reschedule":{"post":{"description":"Moves an appointment to a new time slot. The duration remains unchanged. Validates availability by default \u2014 set `ignoreAvailability: true` to schedule outside available hours or on top of existing appointments.\n\n**Side effects:** Sends reschedule notifications to all participants, updates calendar events, regenerates ICS, reschedules reminders, updates CRM integrations, and fires `booking_rescheduled` webhook.","operationId":"rescheduleAppointment","parameters":[{"name":"id","required":true,"in":"path","description":"Appointment ID (UUID)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleAppointmentDto"}}}},"responses":{"200":{"description":"The rescheduled appointment with previous start time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleResponseDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescheduleResponseDto"}}}},"400":{"description":"Invalid start time, time slot conflict, or appointment already completed"},"403":{"description":"User does not have access or reschedule feature is not available"},"404":{"description":"Appointment not found"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Reschedule an appointment","tags":["Appointment V4"]}},"/v4/attendee/pending":{"post":{"description":"Creates a pending attendee record during form submission. This is temporary data that gets deleted when booking is completed.","operationId":"postInfo","parameters":[],"requestBody":{"required":true,"description":"Attendee information collected during form entry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAttendeePendingDto"}}}},"responses":{"201":{"description":"Pending attendee created successfully","content":{"application/json":{"schema":{"type":"number"}}}}},"summary":"Create pending attendee","tags":["Attendee Pending V4"]},"get":{"description":"Retrieves all pending attendee records for the authenticated user's company. Limited to 99 most recent entries.","operationId":"getPendingAttendees","parameters":[],"responses":{"200":{"description":"List of pending attendees retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AttendeePendingResponseDto"}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get pending attendees","tags":["Attendee Pending V4"]}},"/v4/attendee/pending/{id}":{"patch":{"description":"Updates an existing pending attendee record with new information during form modification.","operationId":"updateInfo","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the pending attendee record","schema":{"type":"number"}}],"requestBody":{"required":true,"description":"Updated attendee information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAttendeePendingDto"}}}},"responses":{"200":{"description":"Pending attendee updated successfully","content":{"application/json":{"schema":{"type":"number"}}}}},"summary":"Update pending attendee","tags":["Attendee Pending V4"]}},"/v4/personal-page/me":{"get":{"operationId":"getMyPersonalPage","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalPageResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalPageResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get personal page of the requesting user","tags":["Personal Page V4"]},"patch":{"operationId":"updateMyPersonalPage","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePersonalPageDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update personal page of the requesting user","tags":["Personal Page V4"]}},"/v4/personal-page/{id}":{"get":{"operationId":"getPersonalPageByUserId","parameters":[{"name":"id","required":true,"in":"path","description":"Target user ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalPageResponseDto"}}}},"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalPageResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get personal page by user ID (admin only)","tags":["Personal Page V4"]},"patch":{"operationId":"updatePersonalPageByUserId","parameters":[{"name":"id","required":true,"in":"path","description":"Target user ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePersonalPageDto"}}}},"responses":{"200":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update personal page by user ID (admin only)","tags":["Personal Page V4"]}},"/v4/personal-page/header-picture":{"patch":{"operationId":"updatePersonalPagePicture","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update personal page header picture","tags":["Personal Page V4"]}},"/v4/user":{"post":{"description":"Creates a new platform user with automatically generated availability schedule and meeting type. The user will be associated with your company and ready for bookings immediately. Basic information for availability (weekly schedule, timezone) and meeting type (name, duration, slug) can be provided in the request. If not provided, default values are used: availability defaults to business hours (9-17 Mon-Fri) in Europe/Berlin timezone, and meeting type defaults to \"30min Meeting\" with 30-minute duration. The response includes IDs for the created user, availability, and meeting type, plus a ready-to-use public booking URL. The defaultAvailabilityId can be used to update availability via PATCH, and meeting types can be fetched and modified or new ones created.","operationId":"createPlatformUser","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreatePlatformUserDto"}}}},"responses":{"201":{"description":"Platform user created successfully with auto-generated availability and meeting type. Returns user ID, availability ID, meeting type ID, company ID, and public booking URL that customers can use immediately.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlatformUserResponseDto"}}}},"403":{"description":"Forbidden - Requires company admin role and an active API Platform subscription. Not available to Personal Access Tokens."}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create platform user","tags":["User V4"]},"get":{"description":"Retrieves a list of users from your company with optional filtering and pagination. Admin access required.","operationId":"listUsers","parameters":[{"name":"userType","required":false,"in":"query","description":"Filter users by type. If not specified, returns all user types.","schema":{"$ref":"#/components/schemas/UserType"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of users to return","schema":{"minimum":1,"maximum":100,"default":50,"example":20,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Number of users to skip for pagination","schema":{"minimum":0,"default":0,"example":0,"type":"number"}}],"responses":{"200":{"description":"Users retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListUsersResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"List users","tags":["User V4"]}},"/v4/user/me":{"get":{"description":"Retrieves detailed information about the currently authenticated user including their availability schedules, meeting types, and company association. For API key authentication without the x-meetergo-api-user-id header, returns the company owner.","operationId":"getCurrentUser","parameters":[],"responses":{"200":{"description":"Current user information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get current user information","tags":["User V4"]}},"/v4/user/{id}":{"get":{"description":"Retrieves detailed information about a user including their availability schedules, meeting types, and company association.","operationId":"getUserById","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the user","schema":{"type":"string"}}],"responses":{"200":{"description":"User information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponseDto"}}}},"404":{"description":"User not found or does not belong to your company"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get user information","tags":["User V4"]},"delete":{"description":"Permanently deletes a user from your company with optional resource transfer. Only company admins can delete users. You cannot delete yourself or the company owner. Before deletion, you can optionally transfer the user's resources (meeting types, forms, workflows, showcases, availabilities, qualifiers) to another user in your company by providing a targetUserId. This operation cannot be undone.","operationId":"deleteUser","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the user to delete","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"requestBody":{"required":false,"description":"Optional resource transfer configuration. Specify targetUserId to transfer resources to another user. You can selectively choose which resource types to transfer (all enabled by default).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteUserWithTransferDto"},"examples":{"withTransfer":{"summary":"Delete with resource transfer","description":"Delete user and transfer all resources to another user","value":{"targetUserId":"987e6543-e21b-12d3-a456-426614174000","transferMeetingTypes":true,"transferForms":true,"transferWorkflows":true,"transferShowcases":true,"transferAvailabilities":true,"transferQualifiers":true}},"withoutTransfer":{"summary":"Delete without transfer","description":"Delete user without transferring resources","value":{}},"selectiveTransfer":{"summary":"Selective resource transfer","description":"Transfer only meeting types and forms","value":{"targetUserId":"987e6543-e21b-12d3-a456-426614174000","transferMeetingTypes":true,"transferForms":true,"transferWorkflows":false,"transferShowcases":false,"transferAvailabilities":false,"transferQualifiers":false}}}}}},"responses":{"200":{"description":"User deleted successfully"},"400":{"description":"Bad request - Cannot delete yourself or user not found"},"403":{"description":"Forbidden - Only admins can delete users or cannot delete company owner"},"404":{"description":"User not found or does not belong to your company"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete a user","tags":["User V4"]},"patch":{"description":"Updates basic profile fields (first name, last name, slug) for a user in your company. Any user can update their own profile; only company admins can update other users. Provide any subset of fields \u2014 omitted fields stay unchanged. Slugs must be unique across the platform and at least 5 characters; invalid characters are normalized automatically. Email and login identity are not editable here; this is a database-only update and does not affect the user\u2019s authentication.","operationId":"updateUser","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the user to update","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlatformUserDto"}}}},"responses":{"200":{"description":"User updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponseDto"}}}},"400":{"description":"Bad request \u2014 empty body, slug too short, or slug already taken"},"403":{"description":"Forbidden \u2014 non-admins can only update their own profile"},"404":{"description":"User not found or does not belong to your company"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update platform user","tags":["User V4"]}},"/v4/user/{id}/calendar-sync":{"patch":{"description":"Updates the calendar sync provider settings for a specific user. Only company admins can update calendar sync settings. The calendar sync provider determines which calendar service (Google, Outlook, iCloud, CalDAV, Exchange, Nextcloud, SmartWe) is used to sync the user's availability and create calendar events for bookings. Provide the calendar connection ID and provider type to set the sync provider.","operationId":"updateUserCalendarSync","parameters":[{"name":"id","required":true,"in":"path","description":"Unique identifier of the user to update","schema":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserCalendarSyncDTO"}}}},"responses":{"200":{"description":"Calendar sync provider updated successfully"},"403":{"description":"Forbidden - Only admins can update calendar sync settings"},"404":{"description":"User not found or does not belong to your company"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update user calendar sync provider","tags":["User V4"]}},"/v4/calendar-connections/auth/{provider}/url":{"get":{"description":"Get the OAuth authorization URL for connecting a calendar provider. The user should be redirected to this URL to complete the OAuth flow. After authorization, the provider will redirect back to the API callback endpoint.","operationId":"getAuthUrl","parameters":[{"name":"provider","required":true,"in":"path","description":"Calendar provider to connect (google, outlook)","schema":{"enum":["google","outlook","icloud","caldav","exchange","smart-we","ics"],"type":"string"}},{"name":"redirectUrl","required":false,"in":"query","description":"URL to redirect to after OAuth completion (defaults to frontend URL)","schema":{"example":"https://yourapp.com/calendar-success","type":"string"}},{"name":"userId","required":false,"in":"query","description":"User ID to connect for (admin only - connects calendar for specified user)","schema":{"example":"user-uuid","type":"string"}},{"name":"setAsCalendarSync","required":false,"in":"query","description":"Whether to automatically set this connection as the calendar sync provider after successful OAuth. If the user already has a calendar sync provider, this will be ignored.","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":"Authorization URL generated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"authUrl":{"type":"string","description":"OAuth authorization URL to redirect user to","example":"https://accounts.google.com/oauth/authorize?client_id=..."},"provider":{"type":"string","enum":["google","outlook","icloud","caldav","exchange","smart-we","ics"],"description":"Calendar provider","example":"google"}}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get OAuth authorization URL","tags":["Calendar Auth V4"]}},"/v4/calendar-connections/auth/{provider}/callback":{"get":{"description":"Handles OAuth callback from calendar providers. This endpoint is called automatically by the provider after the user completes authorization. Creates the calendar connection and redirects the user to the success/error page.","operationId":"handleOAuthCallback","parameters":[{"name":"provider","required":true,"in":"path","description":"Calendar provider handling callback","schema":{"enum":["google","outlook","icloud","caldav","exchange","smart-we","ics"],"type":"string"}},{"name":"code","required":false,"in":"query","description":"OAuth authorization code from provider","schema":{"type":"string"}},{"name":"state","required":false,"in":"query","description":"OAuth state parameter for security","schema":{"type":"string"}},{"name":"error","required":false,"in":"query","description":"Error code if OAuth failed","schema":{"type":"string"}}],"responses":{"200":{"description":""},"302":{"description":"Redirects to success or error URL"}},"summary":"OAuth callback handler","tags":["Calendar Auth V4"]}},"/v4/calendar-connections/connections":{"get":{"description":"Get all calendar connections for the authenticated user or a specific user (admin only). Returns connections from all providers (Google, Outlook).","operationId":"listConnections","parameters":[{"name":"userId","required":false,"in":"query","description":"User ID to get connections for (admin only)","schema":{"example":"user-uuid","type":"string"}}],"responses":{"200":{"description":"Calendar connections retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"connections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"conn-uuid"},"provider":{"type":"string","example":"google"},"email":{"type":"string","example":"user@gmail.com"},"isPrimary":{"type":"boolean","example":true},"isConnected":{"type":"boolean","example":true},"primaryCalendar":{"type":"string","example":"primary"},"selectedCalendars":{"type":"array","items":{"type":"string"},"example":["primary","work-calendar"]},"validateAvailability":{"type":"boolean","example":true},"cancelIfDeclinedOrDeleted":{"type":"boolean","example":true},"disableAttendeeNotification":{"type":"boolean","example":false}}}},"total":{"type":"number","example":2}}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"List calendar connections","tags":["Calendar Connections V4"]}},"/v4/calendar-connections/connections/{connectionId}":{"patch":{"description":"Update settings for a specific calendar connection such as selected calendars, availability validation, and notification preferences.","operationId":"updateConnection","parameters":[{"name":"connectionId","required":true,"in":"path","description":"Unique identifier of the calendar connection","schema":{"example":"conn-uuid","type":"string"}},{"name":"userId","required":false,"in":"query","description":"User ID that owns the connection (admin only)","schema":{"example":"user-uuid","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCalendarConnectionDto"}}}},"responses":{"200":{"description":"Connection updated successfully"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Update calendar connection","tags":["Calendar Connections V4"]},"delete":{"description":"Remove a calendar connection. This will stop syncing calendar data and remove all associated calendar information.","operationId":"deleteConnection","parameters":[{"name":"connectionId","required":true,"in":"path","description":"Unique identifier of the calendar connection","schema":{"example":"conn-uuid","type":"string"}},{"name":"userId","required":false,"in":"query","description":"User ID that owns the connection (admin only)","schema":{"example":"user-uuid","type":"string"}}],"responses":{"200":{"description":"Connection deleted successfully"}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Delete calendar connection","tags":["Calendar Connections V4"]}},"/v4/calendar-connections/connections/{connectionId}/set-primary":{"post":{"description":"Set a calendar connection as the primary connection for the user. The primary connection is used as the default for creating new events.","operationId":"setPrimaryConnection","parameters":[{"name":"connectionId","required":true,"in":"path","description":"Unique identifier of the calendar connection","schema":{"example":"conn-uuid","type":"string"}},{"name":"userId","required":false,"in":"query","description":"User ID that owns the connection (admin only)","schema":{"example":"user-uuid","type":"string"}}],"responses":{"200":{"description":"Primary connection set successfully"},"201":{"description":""}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Set connection as primary","tags":["Calendar Connections V4"]}},"/v4/calendar-connections/connections/{connectionId}/calendars":{"get":{"description":"Retrieve all available calendars for a specific connection. This is used to allow users to select which calendars to sync.","operationId":"getConnectionCalendars","parameters":[{"name":"connectionId","required":true,"in":"path","description":"Unique identifier of the calendar connection","schema":{"example":"conn-uuid","type":"string"}},{"name":"userId","required":false,"in":"query","description":"User ID that owns the connection (admin only)","schema":{"example":"user-uuid","type":"string"}}],"responses":{"200":{"description":"Connection calendars retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"calendars":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"cal-uuid"},"name":{"type":"string","example":"Work Calendar"},"isPrimary":{"type":"boolean","example":true},"canEdit":{"type":"boolean","example":true},"selected":{"type":"boolean","example":false}}}},"connectionId":{"type":"string","example":"conn-uuid"},"provider":{"type":"string","example":"google"}}}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get connection calendars","tags":["Calendar Connections V4"]}},"/v4/signatures/ping":{"get":{"description":"Lightweight authenticated check that your API key works and e-signatures are reachable.","operationId":"ping","parameters":[],"responses":{"200":{"description":"The API key is valid."}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Connection test","tags":["Signatures V4"]}},"/v4/signatures":{"post":{"description":"Uploads a PDF, places signature/text fields on it using normalized (0\u20131) coordinates, and returns a hosted signing link per signer. Signers open the link, sign in the browser, and meetergo returns a cryptographically signed (eIDAS) PDF with a tamper-evident audit page. No email is sent \u2014 use the returned signing links in your own flow.","operationId":"create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSignatureRequestDto"}}}},"responses":{"201":{"description":"Signature request created with a signing link per signer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureRequestResponseDto"}}}},"403":{"description":"Requires an active API Platform subscription."}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Create a signature request","tags":["Signatures V4"]}},"/v4/signatures/{id}":{"get":{"description":"Returns the request status, each signer\u2019s state, and \u2014 once completed \u2014 a time-limited download URL for the signed PDF.","operationId":"getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureRequestResponseDto"}}}},"404":{"description":"Not found."}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Get a signature request","tags":["Signatures V4"]},"delete":{"description":"Cancels a pending request. Its signing links stop working. Completed requests cannot be cancelled.","operationId":"cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureRequestResponseDto"}}}}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Cancel a signature request","tags":["Signatures V4"]}},"/v4/signatures/{id}/document":{"get":{"description":"Returns a time-limited URL to download the signed, audit-paged PDF. Only available once the request is completed.","operationId":"getDocument","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"A `{ url }` to the signed PDF."},"409":{"description":"The request is not completed yet."}},"security":[{"ApiUserHeader":[]},{"JWT":[]},{"ApiKey":[]}],"summary":"Download the signed document","tags":["Signatures V4"]}}},"info":{"title":"meetergo Platform API","description":"Comprehensive scheduling API for creating users, managing availability, handling bookings, and connecting calendar providers. Enables seamless integration with external platforms and applications.","version":"version","contact":{},"termsOfService":"https://www.meetergo.com/tos/"},"tags":[{"name":"User V4","description":"Create and manage users in your workspace"},{"name":"Meeting Type V4","description":"Configure meeting templates with durations, buffers, and conferencing"},{"name":"availability","description":"Manage weekly schedules and availability settings"},{"name":"Booking V4","description":"Create new bookings"},{"name":"Booking Availability V4","description":"Query available time slots for booking"},{"name":"Appointment V4","description":"Manage existing appointments"},{"name":"Attendee V4","description":"Manage attendee details and notes"},{"name":"Calendar Connections V4","description":"Connect and sync external calendars"},{"name":"Signatures V4","description":"Send PDFs for e-signature and download the signed, eIDAS-grade document (DocuSeal-compatible)"},{"name":"One Time Booking Link V4","description":"Create single-use booking links"},{"name":"availability-exception","description":"Override availability for specific dates"},{"name":"Booking Link V4","description":"Configure various booking page types"},{"name":"Personal Page V4","description":"Manage user profile pages"},{"name":"Handoff V4","description":"Reassign meetings to other hosts"},{"name":"Calendar Auth V4","description":"OAuth callbacks for calendar providers"},{"name":"CRM Deals","description":"Create, update, and track deals through pipeline stages (incl. per-deal activity history)"},{"name":"CRM Pipelines","description":"Manage pipelines and their stages"},{"name":"Queue V4","description":"Round-robin and queue-based routing (Beta)"},{"name":"Queue User Group V4","description":"Manage queue user groups (Beta)"},{"name":"Meeting Type Template V4","description":"Reusable meeting type configurations (Beta)"},{"name":"Attendee Pending V4","description":"Manage pending attendee approvals (Beta)"},{"name":"Provisional Booking V4","description":"Manage provisional/unconfirmed bookings (Beta)"}],"servers":[],"components":{"securitySchemes":{"ApiKey":{"scheme":"bearer","bearerFormat":"API Key","type":"http","description":"Bearer token: a Platform API Key (format: ak_live:<uuid>:<secret>) or a Personal Access Token (format: rgo-...). PATs always act as the token owner."},"ApiUserHeader":{"type":"apiKey","in":"header","name":"x-meetergo-api-user-id","description":"User ID to act on behalf of. Platform API Keys only (required with an API Key unless the endpoint states otherwise). Requests authenticated with a Personal Access Token are rejected if this header names another user."},"JWT":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"JWT Bearer token for standard user authentication"}},"schemas":{"Address":{"type":"object","properties":{}},"Language":{"type":"string","enum":["en","de","fr","es","no","nl","it","pl","sv","tr","da"]},"LocalisedContent":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"fr":{"type":"string"},"es":{"type":"string"},"no":{"type":"string"},"it":{"type":"string"},"nl":{"type":"string"},"da":{"type":"string"},"pl":{"type":"string"},"se":{"type":"string"},"tr":{"type":"string"}},"required":["en"]},"MeetingTypeChannel":{"type":"string","enum":["local","local-attendee","google","zoom","phone","phone-incoming","whatsapp","connect","webex","skypeForConsumer","skypeForBusiness","teamsForBusiness","teamsForBusiness2","teamsForExchange","teams2ForExchange","custom","resource","whereby","kmeet","zava","jitsi","nextcloudTalk","openTalk"],"description":"Meeting channel/location type"},"ConfirmationButton":{"type":"object","properties":{"useConfirmationButton":{"type":"boolean"},"text":{"type":"string"},"color":{"type":"string"},"link":{"type":"string"}},"required":["useConfirmationButton","text","color","link"]},"MeetingInfo":{"type":"object","properties":{"name":{"type":"string","description":"Name of the meeting type"},"description":{"type":"string","description":"Description of the meeting type"},"nameLocalised":{"nullable":true,"description":"Per-language overrides for the title. Falls back to `name`.","allOf":[{"$ref":"#/components/schemas/LocalisedContent"}]},"descriptionLocalised":{"nullable":true,"description":"Per-language overrides for the description. Falls back to `description`.","allOf":[{"$ref":"#/components/schemas/LocalisedContent"}]},"enableRedirect":{"type":"boolean","description":"Enable redirect after booking completion"},"redirect":{"type":"string","description":"Redirect URL to navigate after booking"},"passEventDetailsToRedirect":{"type":"boolean","description":"Pass event details (invitee name, email, form answers) as query params to redirect URL"},"duration":{"type":"number","description":"Primary duration in minutes"},"channel":{"description":"Meeting channel/location type","allOf":[{"$ref":"#/components/schemas/MeetingTypeChannel"}]},"customChannelName":{"type":"string","description":"Custom name for the meeting channel"},"customChannelLink":{"type":"string","description":"Custom link for the meeting channel"},"connectChannelName":{"type":"string","description":"Custom display name for the connect channel"},"groupBooking":{"type":"boolean","description":"Enable group booking (multiple attendees per slot)"},"showAvailableSlots":{"type":"boolean","description":"Show available spots count on the booking page"},"enrichInvitee":{"type":"boolean","description":"Enable invitee data enrichment"},"confirmationButton":{"description":"Confirmation button settings","allOf":[{"$ref":"#/components/schemas/ConfirmationButton"}]},"bufferBefore":{"type":"number","description":"Buffer time before meeting in minutes"},"bufferAfter":{"type":"number","description":"Buffer time after meeting in minutes"},"bufferMustStayWithinWorkingHours":{"type":"boolean","description":"Only offer slots where buffer fits within working hours (no spillover into breaks or after-hours)"},"color":{"type":"object","description":"Color for the meeting type in RGB format, e.g. \"rgb(0, 153, 255)\"","nullable":true}},"required":["name","description","enableRedirect","redirect","passEventDetailsToRedirect","duration","channel","customChannelName","customChannelLink","connectChannelName","groupBooking","showAvailableSlots","enrichInvitee","confirmationButton","bufferBefore","bufferAfter","bufferMustStayWithinWorkingHours"]},"CssSetting":{"type":"object","properties":{"mode":{"type":"number"},"themePreset":{"type":"string","enum":["light","dark","eco","charcoal","bold"]}},"required":["mode"]},"BookingPagePasswordSetting":{"type":"object","properties":{"enable":{"type":"boolean","description":"Enable password protection for booking page"},"password":{"type":"object","description":"Password for booking page access"}},"required":["enable","password"]},"MeetingOptions":{"type":"object","properties":{"allowedDurations":{"description":"Additional duration options in minutes (shown alongside primary duration)","example":[15,30,60],"type":"array","items":{"type":"number"}},"allowSelectChannel":{"type":"boolean","description":"Allow attendees to select meeting channel/location"},"allowHostSelection":{"type":"boolean","description":"Allow attendees to select specific host (round-robin only)"},"forceHostSelection":{"type":"boolean","description":"Force host selection (no \"any host\" option available)"},"allowedChannels":{"type":"array","description":"Available channel options when allowSelectChannel is enabled","items":{"$ref":"#/components/schemas/MeetingTypeChannel"}},"channelAvailabilities":{"type":"object","description":"Per-channel availability overrides. Each value can be a UUID string (existing availability) or an inline availability object with \"name\", \"timezone\", and optional \"schedule\" and \"exceptions\" for creation."},"allowAddingGuests":{"type":"boolean","description":"Allow attendees to invite additional guests"},"doubleOptIn":{"type":"string","description":"Double opt-in confirmation setting"},"requireHostConfirmation":{"type":"string","description":"Require host confirmation for bookings"},"enableClusterMeeting":{"type":"boolean","description":"Show only time slots adjacent to existing meetings"},"enableBufferCarryOver":{"type":"boolean","description":"Carry over buffer time to next available slot if needed"},"maxBufferCarryOverDelay":{"type":"number","description":"Maximum hours for buffer carry-over delay (0-168)"},"allowPhoneOnlyBooking":{"type":"boolean","description":"Allow phone-only bookings without email (API use case, requires phoneOnlyBooking in request)"},"confirmationPageCssSetting":{"description":"Custom CSS settings for confirmation pages","allOf":[{"$ref":"#/components/schemas/CssSetting"}]},"bookingPagePassword":{"description":"Password protection settings for booking page","allOf":[{"$ref":"#/components/schemas/BookingPagePasswordSetting"}]}},"required":["allowedDurations","allowSelectChannel","allowHostSelection","forceHostSelection","allowedChannels","allowAddingGuests","doubleOptIn","requireHostConfirmation","enableClusterMeeting","enableBufferCarryOver","maxBufferCarryOverDelay","allowPhoneOnlyBooking","confirmationPageCssSetting","bookingPagePassword"]},"HoursSchedule":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"DaySchedule":{"type":"object","properties":{"enabled":{"type":"boolean"},"hours":{"type":"array","items":{"$ref":"#/components/schemas/HoursSchedule"}}},"required":["enabled","hours"]},"WeeklySchedule":{"type":"object","properties":{"monday":{"$ref":"#/components/schemas/DaySchedule"},"tuesday":{"$ref":"#/components/schemas/DaySchedule"},"wednesday":{"$ref":"#/components/schemas/DaySchedule"},"thursday":{"$ref":"#/components/schemas/DaySchedule"},"friday":{"$ref":"#/components/schemas/DaySchedule"},"saturday":{"$ref":"#/components/schemas/DaySchedule"},"sunday":{"$ref":"#/components/schemas/DaySchedule"}},"required":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]},"FormFieldTarget":{"type":"string","enum":["email","firstname","lastname","fullname","phone","other"]},"FormFieldType":{"type":"string","enum":["email","phone","text-single","text-multi","number","select","checkbox-single","checkbox-multi","radio","slide","url","file","date-of-birth","yes-no","rating","scale","signature","date","time","image","heading","separator","page-break","contact","bank-details","license-plate","info-text","info-image","info-video","currency","location","pdf-template","file-download"]},"FieldLocale":{"type":"object","properties":{"locale":{"type":"string"},"label":{"type":"string"},"placeholder":{"type":"string"}},"required":["locale","label"]},"FieldOptions":{"type":"object","properties":{"pointValue":{"type":"number","description":"Points awarded when this option is selected (for scored forms)"},"locales":{"description":"Translations for the option label, same structure as field-level locales","type":"array","items":{"$ref":"#/components/schemas/FieldLocale"}},"label":{"type":"string"},"value":{"type":"string"},"image":{"type":"string"},"icon":{"type":"string"},"minValue":{"type":"number","description":"Used by number fields, min value"},"maxValue":{"type":"number","description":"Used by number fields, max value"}},"required":["label","value"]},"SlideType":{"type":"string","enum":["checkbox","page","image","icon"]},"SlideOptions":{"type":"object","properties":{"description":{"type":"string"},"multiselect":{"type":"boolean"},"type":{"allOf":[{"$ref":"#/components/schemas/SlideType"}]},"hideLabel":{"type":"boolean"},"childFields":{"type":"array","description":"Per-page child-field instances inside the slide. The editor owns the\nSlideChildField shape (instanceId, index, dataFieldId, optional inline\ndefinition, legacy `required` flag, etc.). We accept it verbatim and\nkeep the type loose because the legacy import path adds extra fields the\neditor doesn't model. Declaring it on the DTO is what lets a save carry\nchildFields through: without it, class-transformer drops the unknown key\nfrom the request body, so DnD-added children never persist.","items":{"type":"object"}}},"required":["description","multiselect","type"]},"FileFieldOptions":{"type":"object","properties":{"allowedExtensions":{"description":"Allowed file extensions (e.g., pdf, docx, jpg)","type":"array","items":{"type":"string"}},"maxFileSizeMB":{"type":"number","description":"Maximum file size in MB","default":5},"maxFiles":{"type":"number","description":"Maximum number of files","default":1},"enableCameraCapture":{"type":"boolean","description":"Enable camera capture on mobile devices (shows camera/file toggle). Only works when allowedExtensions includes image types.","default":false}},"required":["allowedExtensions","maxFileSizeMB","maxFiles"]},"ContactOptions":{"type":"object","properties":{"salutation":{"type":"boolean","default":false},"firstName":{"type":"boolean","default":true},"lastName":{"type":"boolean","default":true},"email":{"type":"boolean","default":true},"phone":{"type":"boolean","default":true},"mobile":{"type":"boolean","default":false},"birthdate":{"type":"boolean","default":false},"street":{"type":"boolean","default":false},"addressSupplement":{"type":"boolean","default":false},"zip":{"type":"boolean","default":false},"city":{"type":"boolean","default":false},"country":{"type":"boolean","default":false}}},"BankDetailsOptions":{"type":"object","properties":{"showBic":{"type":"boolean","default":true},"showAccountHolder":{"type":"boolean","default":true},"showSignature":{"type":"boolean","default":false}}},"LicensePlateOptions":{"type":"object","properties":{"countryFilter":{"type":"string","enum":["all","de"],"default":"all","description":"Country format filter: all = any country, de = German format only"}}},"PdfTemplateOptions":{"type":"object","properties":{"fileAssetId":{"type":"string","description":"FileAsset ID of the uploaded PDF template"},"pdfmeTemplate":{"type":"object","description":"pdfme template schema JSON (positions of fields on the PDF). Does not include the basePdf bytes."},"requireSignature":{"type":"boolean","description":"When true, respondent must draw a signature before accepting the document.","default":false},"requireSignatureOtp":{"type":"boolean","description":"When true, respondent must verify their identity via email OTP (FES) before signing.","default":false}},"required":["fileAssetId","pdfmeTemplate","requireSignature"]},"FileDownloadOptions":{"type":"object","properties":{"fileAssetIds":{"description":"FileAsset IDs of library files to offer for download","type":"array","items":{"type":"string"}},"fileNames":{"type":"object","description":"Map of fileAssetId \u2192 original filename for display without extra API calls","additionalProperties":{"type":"string"}}},"required":["fileAssetIds"]},"DataField":{"type":"object","properties":{"id":{"type":"number"},"label":{"type":"string"},"name":{"type":"string"},"target":{"allOf":[{"$ref":"#/components/schemas/FormFieldTarget"}]},"fieldType":{"allOf":[{"$ref":"#/components/schemas/FormFieldType"}]},"locales":{"type":"array","items":{"$ref":"#/components/schemas/FieldLocale"}},"default":{"type":"boolean"},"required":{"type":"boolean"},"hidden":{"type":"boolean"},"hideUntilChange":{"type":"boolean"},"mutable":{"type":"boolean"},"defaultValue":{"type":"string"},"placeholder":{"type":"string"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptions"}},"slideOptions":{"$ref":"#/components/schemas/SlideOptions"},"fileFieldOptions":{"description":"Configuration for file upload fields.\nOnly used when fieldType is 'file'.","allOf":[{"$ref":"#/components/schemas/FileFieldOptions"}]},"contactOptions":{"description":"Configuration for contact composite fields.\nControls which sub-inputs (name, email, phone, address, etc.) are shown.","allOf":[{"$ref":"#/components/schemas/ContactOptions"}]},"hubspotContactField":{"type":"string"},"hubspotCompanyField":{"type":"string"},"smartWeContactField":{"type":"string"},"smartWeCompanyField":{"type":"string"},"pipedriveContactField":{"type":"string"},"closeContactField":{"type":"string"},"salesforceContactField":{"type":"string"},"salesforceLeadField":{"type":"string"},"salesforceCaseField":{"type":"string"},"salesforceOpportunityField":{"type":"string"},"salesforceAccountField":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"helpText":{"type":"string","description":"Optional help text shown below the field in the booking form.\nProvides additional guidance to users filling out the form."},"bankDetailsOptions":{"description":"Configuration for bank details composite fields.\nControls which optional sub-inputs (BIC, account holder, signature) are shown.","allOf":[{"$ref":"#/components/schemas/BankDetailsOptions"}]},"licensePlateOptions":{"description":"Configuration for license plate fields.\nControls country format validation.","allOf":[{"$ref":"#/components/schemas/LicensePlateOptions"}]},"pdfTemplateOptions":{"description":"Configuration for PDF template fields.\nHolds the uploaded template PDF reference and pdfme schema JSON.","allOf":[{"$ref":"#/components/schemas/PdfTemplateOptions"}]},"fileDownloadOptions":{"description":"Configuration for file download display fields.\nHolds IDs of library files to offer for download.","allOf":[{"$ref":"#/components/schemas/FileDownloadOptions"}]},"displayStyle":{"type":"object","description":"Controls how options are displayed for radio/checkbox/select fields.\n'default' - Standard list view\n'card' - Card grid with optional icons"},"conditions":{"type":"object","nullable":true,"description":"Conditional visibility expression. When set, the field is only shown\nto the visitor when the expression evaluates to true against current form values.\nUses the same Expression/ExpressionCondition structure as routing rules."},"headingLevel":{"type":"number","description":"Heading level for heading fields (1\u20136).\nDefaults to 2 (renders as <h2>)."},"showInfobox":{"type":"boolean","description":"Only for data fields of type slide, enable to show an infobox."},"infoboxText":{"type":"string","description":"Only for data fields of type slide, custom infobox text."},"companyId":{"type":"string"},"evalancheFieldId":{"type":"string"},"klicktippFieldId":{"type":"string"},"min":{"type":"number","description":"Currently used by number field as min value.\nFor string field, it is minimum amount of characters."},"max":{"type":"number"},"style":{"type":"number","description":"For Phone Number field - used to set the style of phone input.\n0 - Simple (Default)\n1 - With country code picker"},"defaultCountryCode":{"type":"string","description":"For Phone Number field - default country code (e.g., \"+1\", \"+49\", \"+44\").\nUsed when style is WITH_COUNTRY_CODE_PICKER to set the initial country selection."},"useMarkdown":{"type":"boolean","description":"When true, field.label is rendered through markdown-it (html: false).\nAllows **bold**, _italic_, `code`, and links in field labels."},"requireSignatureOtp":{"type":"boolean","description":"When true, the signer must verify their email via OTP before the signature canvas is unlocked."}},"required":["id","label","name","target","fieldType","locales","default","required","hidden","hideUntilChange","mutable","options","createdAt","updatedAt","showInfobox","companyId","useMarkdown","requireSignatureOtp"]},"FormField":{"type":"object","properties":{"form":{"$ref":"#/components/schemas/Form"},"formId":{"type":"string"},"dataField":{"$ref":"#/components/schemas/DataField"},"dataFieldId":{"type":"number"},"index":{"type":"number"}},"required":["form","formId","dataField","dataFieldId","index"]},"FunnelStepDataField":{"type":"object","properties":{"id":{"type":"string"},"funnelStep":{"$ref":"#/components/schemas/FunnelStep"},"funnelStepId":{"type":"string"},"funnelStepFormId":{"type":"string"},"dataField":{"$ref":"#/components/schemas/DataField"},"dataFieldId":{"type":"number"},"order":{"type":"number"}},"required":["id","funnelStep","funnelStepId","dataField","dataFieldId","order"]},"FunnelStep":{"type":"object","properties":{"form":{"$ref":"#/components/schemas/Form"},"id":{"type":"string"},"index":{"type":"number"},"formId":{"type":"string"},"funnelStepDataFields":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStepDataField"}}},"required":["form","id","index","formId","funnelStepDataFields"]},"LogicalOperator":{"type":"string","enum":["and","or"]},"Expression":{"type":"object","properties":{"operator":{"allOf":[{"$ref":"#/components/schemas/LogicalOperator"}]},"operands":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/Expression"},{"$ref":"#/components/schemas/ExpressionCondition"}]}}},"required":["operator","operands"]},"FunnelQualifier":{"type":"object","properties":{"fieldId":{"type":"string"},"expression":{"$ref":"#/components/schemas/Expression"}},"required":["fieldId","expression"]},"SelectionPageLayout":{"type":"string","enum":["grid","list","cards","tiles","spotlight","minimal"]},"AvailabilityExceptionOwner":{"type":"string","enum":["company","user"]},"AvailabilityException":{"type":"object","properties":{"ownerId":{"type":"string"},"ownerType":{"allOf":[{"$ref":"#/components/schemas/AvailabilityExceptionOwner"}]},"available":{"type":"boolean"},"start":{"type":"string","description":"Start time stored as clock time: \"YYYY-MM-DDTHH:mm\" (e.g., \"2026-01-20T10:00\").\nInterpreted in availability.timezone when querying.\n\nBACKWARDS COMPATIBILITY (migration in progress since Dec 2025):\nLegacy data has Z suffix (e.g., \"2026-01-20T10:00:00.000Z\") and is interpreted as UTC.\nWhen all legacy exceptions expire or are edited, the Z-suffix handling can be removed."},"end":{"type":"string","description":"End time stored as clock time: \"YYYY-MM-DDTHH:mm\" (e.g., \"2026-01-20T17:00\").\nInterpreted in availability.timezone when querying.\n\nBACKWARDS COMPATIBILITY (migration in progress since Dec 2025):\nLegacy data has Z suffix (e.g., \"2026-01-20T17:00:00.000Z\") and is interpreted as UTC.\nWhen all legacy exceptions expire or are edited, the Z-suffix handling can be removed."},"title":{"type":"string","description":"Optional title"},"note":{"type":"string","description":"Optional note / description"},"id":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"availabilityId":{"type":"string"}},"required":["ownerId","ownerType","available","start","end","id","createdAt","updatedAt","availabilityId"]},"ResourceChannel":{"type":"object","properties":{"name":{"type":"string","description":"Optional name to show for resource channel, fall back to user name","nullable":true},"resource":{"description":"Selected resource","allOf":[{"$ref":"#/components/schemas/User"}]},"groupName":{"type":"string","description":"If resource channel is part of a group, this is the name of the group.\nMultiple resource channels can be part of the same group, in which case the name is the same.\nMultiple resources with the same group name are grouped and only the group name is shown as a\nresource. Any resource within the group can be selected according to the items `groupIndex`.\nIf resource channel is the only group member, this has no effect."},"groupMemberIndex":{"type":"number","description":"If resource channel is part of a group, this is the zero-based index to determine order\nthat resource channel will be chosen within the group. Group members with index 0 will be chosen\nfirst, then 1, then 2, etc.\nIf `groupName` is null, this has no effect."},"availability":{"description":"Selected availability (fall back to default)","allOf":[{"$ref":"#/components/schemas/Availability"}]},"meetingType":{"description":"Must belong to a meeting type or a meeting type template","allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"meetingTypeTemplate":{"description":"Must belong to a meeting type or a meeting type template","allOf":[{"$ref":"#/components/schemas/MeetingTypeTemplate"}]},"id":{"type":"string"},"resourceId":{"type":"string"},"availabilityId":{"type":"string"},"meetingTypeId":{"type":"string"},"meetingTypeTemplateId":{"type":"string"}},"required":["resource","id","resourceId"]},"Availability":{"type":"object","properties":{"timezone":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"schedule":{"$ref":"#/components/schemas/WeeklySchedule"},"useExplicitAvailability":{"type":"boolean","description":"When enabled, only calendar events with the specified title will be used as available slots.\nThis replaces the weekly schedule with explicit availability windows."},"explicitAvailabilityEventTitle":{"type":"string","nullable":true,"description":"The calendar event title to look for when useExplicitAvailability is enabled.\nEvents with this title will be treated as available booking slots."},"userId":{"type":"string"},"availabilityExceptions":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityException"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"meetingType":{"$ref":"#/components/schemas/MeetingType"},"meetingTypeTemplate":{"$ref":"#/components/schemas/MeetingTypeTemplate"},"resourceChannels":{"type":"array","items":{"$ref":"#/components/schemas/ResourceChannel"}}},"required":["timezone","id","name","schedule","useExplicitAvailability","userId","createdAt","updatedAt","resourceChannels"]},"CompanyTier":{"type":"string","enum":["basic","essentials","growth","teams","enterprise"]},"SubscriptionStatus":{"type":"string","enum":["active","past_due","unpaid","canceled","incomplete","incomplete_expired","trialing"]},"Currency":{"type":"string","enum":["USD","EUR"],"description":"User's preferred currency for billing.\nIf null, detected currency from billing address country is used."},"BrandType":{"type":"string","enum":["solo","team"],"description":"Reflects solo/team choice during onboarding\nbut doesn't affect anything else"},"EmailSender":{"type":"string","enum":["custom-smtp","sendgrid","microsoft-smtp"],"description":"Sender to use for sending emails. Defaults to null\nwhich uses the default sender. If a sender is configured\nthe configuration must still be fetched. If there is an\nerror with configuration, fall back to default and notify."},"ConnectWaitingRoomSettings":{"type":"object","properties":{"welcomeText":{"type":"string","description":"Welcome text shown above the prejoin card"},"logoUrl":{"type":"string","description":"Logo shown on the waiting screen, overrides the company logo"},"backgroundImageUrl":{"type":"string","description":"Full-screen background image behind the prejoin card"},"backgroundVideoUrl":{"type":"string","description":"Muted looping background video behind the prejoin card, takes precedence over the background image"},"brandColor":{"type":"string","description":"Accent color for the join button, hex format","example":"#2563eb"}}},"FeatureAccess":{"type":"object","properties":{"polls":{"type":"boolean"},"advancedMeetingTypeSettings":{"type":"boolean"},"workflows":{"type":"boolean"},"meetingTypeCommunications":{"type":"boolean"},"multiHostBooking":{"type":"boolean"},"groupBooking":{"type":"boolean"},"enrichInvitee":{"type":"boolean"},"zapier":{"type":"boolean"},"personalizedBranding":{"type":"boolean"},"crmIntegration":{"type":"boolean"},"routingForms":{"type":"boolean"},"basicForms":{"type":"boolean"},"selectionPages":{"type":"boolean"},"dataFields":{"type":"boolean"},"roundRobin":{"type":"boolean"},"handoff":{"type":"boolean"},"reschedule":{"type":"boolean"},"notifications":{"type":"boolean"},"workspaces":{"type":"boolean"},"sendgridIntegration":{"type":"boolean"},"api":{"type":"boolean"},"showcaseHubs":{"type":"boolean"},"meetergoConnect":{"type":"boolean"},"connectRecording":{"type":"boolean"},"webhooks":{"type":"boolean"},"wallets":{"type":"boolean"},"dealSpace":{"type":"boolean"},"funnel":{"type":"boolean"},"unlimitedMeetingTypes":{"type":"boolean"},"salesforceIntegration":{"type":"boolean"},"salesforceStudioMapping":{"type":"boolean"},"maximumCalendars":{"type":"number"},"disableIntercom":{"type":"boolean"},"evalancheIntegration":{"type":"boolean"},"analytics":{"type":"boolean"},"bookingFunnel":{"type":"boolean"},"funnelProgressAndInfobox":{"type":"boolean"},"contactsBeta":{"type":"boolean"},"paypalIntegration":{"type":"boolean"},"stripeIntegration":{"type":"boolean"},"mollieIntegration":{"type":"boolean"},"meetingTypeTemplates":{"type":"boolean"},"nextBeta":{"type":"boolean"},"video":{"type":"boolean"},"emailLayout":{"type":"boolean"},"reviews":{"type":"boolean"},"brevoIntegration":{"type":"boolean"},"getResponseIntegration":{"type":"boolean"},"customDomain":{"type":"boolean"},"maxCustomDomains":{"type":"number"},"apiPlatform":{"type":"boolean"},"slackIntegration":{"type":"boolean"},"calgent":{"type":"boolean"},"fileUploads":{"type":"boolean"},"storageQuotaMB":{"type":"number"},"multiBooking":{"type":"boolean"},"bundles":{"type":"boolean"},"maxCrmDeals":{"type":"number"},"maxShowcaseHubs":{"type":"number"},"maxDealSpaces":{"type":"number"},"waitlist":{"type":"boolean"},"quickMail":{"type":"boolean"},"enrichDealSpaceCompany":{"type":"boolean"},"whatsappAddon":{"type":"boolean"},"bookingCoupons":{"type":"boolean"},"crmEmailSync":{"type":"boolean"},"websiteChat":{"type":"boolean"}},"required":["polls","advancedMeetingTypeSettings","workflows","meetingTypeCommunications","multiHostBooking","groupBooking","enrichInvitee","zapier","personalizedBranding","crmIntegration","routingForms","basicForms","selectionPages","dataFields","roundRobin","handoff","reschedule","notifications","workspaces","sendgridIntegration","api","showcaseHubs","meetergoConnect","connectRecording","webhooks","wallets","dealSpace","funnel","unlimitedMeetingTypes","salesforceIntegration","salesforceStudioMapping","maximumCalendars","disableIntercom","evalancheIntegration","analytics","bookingFunnel","funnelProgressAndInfobox","contactsBeta","paypalIntegration","stripeIntegration","mollieIntegration","meetingTypeTemplates","nextBeta","video","emailLayout","reviews","brevoIntegration","getResponseIntegration","customDomain","maxCustomDomains","apiPlatform","slackIntegration","calgent","fileUploads","storageQuotaMB","multiBooking","bundles","maxCrmDeals","maxShowcaseHubs","maxDealSpaces","waitlist","quickMail","enrichDealSpaceCompany","whatsappAddon","bookingCoupons","crmEmailSync","websiteChat"]},"OutlookConnectionRequirementScope":{"type":"string","enum":["teams","outlookCalendar"],"description":"Where the \"host needs a working Microsoft connection\" requirement applies.\nEmpty array = no enforcement. See `OutlookConnectionRequirementScope` for\nthe meaning of each scope. Default empty for backwards compatibility."},"OutlookConnectionType":{"type":"string","enum":["graph","exchangeTeams"],"description":"Which Microsoft connection types are accepted as \"active\" when any scope\nin `outlookConnectionRequirementScopes` is enabled. A host needs at least\none matching active connection. Defaults to both Graph and Exchange Teams."},"MiraDataAccess":{"type":"object","properties":{"meetingTypes":{"type":"boolean"},"appointments":{"type":"boolean"},"workflows":{"type":"boolean"},"forms":{"type":"boolean"},"files":{"type":"boolean"},"contacts":{"type":"boolean"},"companies":{"type":"boolean"},"deals":{"type":"boolean"}},"required":["meetingTypes","appointments","workflows","forms","files","contacts","companies","deals"]},"MiraWebChat":{"type":"object","properties":{"enabled":{"type":"boolean"},"publicKey":{"type":"object","nullable":true},"allowedDomains":{"type":"array","items":{"type":"string"}},"assistantName":{"type":"string"},"welcomeMessage":{"type":"string"},"accentColor":{"type":"string"},"logoUrl":{"type":"object","nullable":true},"launcherPosition":{"type":"string","enum":["bottom-right","bottom-left"]},"launcherIcon":{"type":"string","enum":["chat","sparkle","question","custom"]},"launcherImageUrl":{"type":"object","nullable":true},"launcherLabel":{"type":"string"},"quickActions":{"type":"array","items":{"type":"string"}},"greetingEnabled":{"type":"boolean"},"greetingMessage":{"type":"string"},"autoOpen":{"type":"boolean"},"autoOpenDelay":{"type":"number"},"autoLocalize":{"type":"boolean"},"customPrompt":{"type":"string"},"qualify":{"type":"boolean"},"routingFormId":{"type":"object","nullable":true},"bookingMeetingTypeId":{"type":"object","nullable":true},"useKnowledge":{"type":"boolean"},"aiDisclosure":{"type":"boolean"},"privacyPolicyUrl":{"type":"object","nullable":true},"imprintUrl":{"type":"object","nullable":true},"transcriptRetentionDays":{"type":"number"},"humanHandoff":{"type":"boolean"},"handoffOfflineBehavior":{"type":"string","enum":["lead","message"]},"conversationRetentionDays":{"type":"number"}},"required":["enabled","publicKey","allowedDomains","assistantName","welcomeMessage","accentColor","logoUrl","launcherPosition","launcherIcon","launcherImageUrl","launcherLabel","quickActions","greetingEnabled","greetingMessage","autoOpen","autoOpenDelay","autoLocalize","customPrompt","qualify","routingFormId","bookingMeetingTypeId","useKnowledge","aiDisclosure","privacyPolicyUrl","imprintUrl","transcriptRetentionDays","humanHandoff","handoffOfflineBehavior","conversationRetentionDays"]},"MiraSettings":{"type":"object","properties":{"enabled":{"type":"boolean"},"activationPromptSeen":{"type":"boolean"},"dataAccess":{"$ref":"#/components/schemas/MiraDataAccess"},"webChat":{"$ref":"#/components/schemas/MiraWebChat"},"customInstructions":{"type":"string"}},"required":["enabled","activationPromptSeen","dataAccess","webChat","customInstructions"]},"CompanyBillingAddress":{"type":"object","properties":{"companyName":{"type":"string"},"country":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"},"vatNumber":{"type":"string","nullable":true}},"required":["companyName","country","addressLine1","addressLine2","city","postalCode"]},"CompanyTutorialSteps":{"type":"object","properties":{"downloadContract":{"type":"boolean","default":false},"downloadPolicyText":{"type":"boolean","default":false}}},"CrmCustomField":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"type":{"type":"object"},"required":{"type":"boolean"},"options":{"type":"array","items":{"type":"string"}},"order":{"type":"number"}},"required":["id","key","label","type","required","order"]},"CompanyMetaData":{"type":"object","properties":{"companySize":{"type":"string"},"tutorialSteps":{"$ref":"#/components/schemas/CompanyTutorialSteps"},"campaignPriority":{"type":"string"},"preferences":{"type":"array","items":{"type":"string"}},"crmCustomFields":{"type":"array","items":{"$ref":"#/components/schemas/CrmCustomField"}},"partner":{"type":"string","description":"Identifies the partner integration that provisioned this company\n(e.g. 'placetel'). Set by the partner provisioning endpoint."},"trialExtended":{"type":"boolean","description":"Set to true when the trial was manually extended (e.g. after a\ncustomer replied \"VERL\u00c4NGERN\" to a trial-ending email). Used as a\nBrevo contact attribute to gate the post-extension email sequence."}}},"ContactDealStats":{"type":"object","properties":{"viewHistory":{"type":"array","items":{"type":"string"}}},"required":["viewHistory"]},"CustomerContact":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"profilePicture":{"type":"string"},"position":{"type":"string"},"isInternal":{"type":"boolean"},"language":{"allOf":[{"$ref":"#/components/schemas/Language"}]},"id":{"type":"string"},"dealId":{"type":"string"},"companyId":{"type":"string"},"customerCompanyId":{"type":"string"},"passcode":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"stats":{"$ref":"#/components/schemas/ContactDealStats"}},"required":["isInternal","language","id","dealId","companyId","passcode","createdAt","updatedAt","stats"]},"DealNotificationSettings":{"type":"object","properties":{"stageAdded":{"type":"boolean"},"stageUpdated":{"type":"boolean"},"stageCompleted":{"type":"boolean"},"stageOverdue":{"type":"boolean"},"stepAdded":{"type":"boolean"},"stepUpdated":{"type":"boolean"},"stepCompleted":{"type":"boolean"},"stepAssigned":{"type":"boolean"},"stepOverdue":{"type":"boolean"},"tasksUpdated":{"type":"boolean"},"commentAdded":{"type":"boolean"},"stakeholderInvited":{"type":"boolean"},"dealVisited":{"type":"boolean"}},"required":["stageAdded","stageUpdated","stageCompleted","stageOverdue","stepAdded","stepUpdated","stepCompleted","stepAssigned","stepOverdue","tasksUpdated","commentAdded","stakeholderInvited","dealVisited"]},"DealNotification":{"type":"object","properties":{"id":{"type":"string"},"deal":{"$ref":"#/components/schemas/Deal"},"dealId":{"type":"string"},"internalUser":{"$ref":"#/components/schemas/User"},"internalUserId":{"type":"string"},"externalUser":{"$ref":"#/components/schemas/CustomerContact"},"externalUserId":{"type":"string"},"settings":{"$ref":"#/components/schemas/DealNotificationSettings"}},"required":["id","deal","dealId","settings"]},"PublicCompanyInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"logo":{"type":"string"},"tier":{"allOf":[{"$ref":"#/components/schemas/CompanyTier"}]},"primaryColor":{"type":"string"},"useBrandStyling":{"type":"boolean"},"hideMeetergoBranding":{"type":"boolean"},"showDataPolicyLink":{"type":"boolean"},"hideDataPolicyCheckbox":{"type":"boolean"},"dataPolicyLink":{"type":"string","nullable":true},"imprintLink":{"type":"string","nullable":true},"deleted":{"type":"boolean"},"useFormalBookingLanguage":{"type":"boolean"},"enableCustomLegalText":{"type":"boolean"},"enableCookieBanner":{"type":"boolean"},"customLegalText":{"type":"string"},"customBookingCSS":{"type":"string"},"featureAccess":{"$ref":"#/components/schemas/FeatureAccess"},"language":{"type":"string"},"allowedLanguages":{"type":"array","items":{"type":"string"}},"googleAnalyticsMeasurementId":{"type":"string","nullable":true},"metaPixelId":{"type":"string","nullable":true},"tiktokPixelId":{"type":"string","nullable":true},"gtmContainerId":{"type":"string","nullable":true}},"required":["id","name","description","tier","primaryColor","useBrandStyling","hideMeetergoBranding","showDataPolicyLink","hideDataPolicyCheckbox","dataPolicyLink","imprintLink","deleted","useFormalBookingLanguage","enableCustomLegalText","enableCookieBanner","customLegalText","customBookingCSS","featureAccess","language","googleAnalyticsMeasurementId","metaPixelId","tiktokPixelId","gtmContainerId"]},"PublicUserInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"picture":{"type":"string"},"title":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"required":["id","name","slug"]},"StageStepType":{"type":"string","enum":["meeting","task","approval"]},"StageStepTask":{"type":"object","properties":{"description":{"type":"string"},"done":{"type":"boolean"},"id":{"type":"string"}},"required":["description","done","id"]},"StepCTA":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url"]},"StepComment":{"type":"object","properties":{"text":{"type":"string"},"id":{"type":"string"},"stepId":{"type":"string"},"internalOwnerId":{"type":"string","nullable":true},"ownerId":{"type":"string","nullable":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["text","id","stepId","createdAt","updatedAt"]},"DealStepResource":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"},"id":{"type":"string"}},"required":["label","url","id"]},"DealStageStep":{"type":"object","properties":{"index":{"type":"number"},"title":{"type":"string"},"description":{"type":"string"},"isInternal":{"type":"boolean"},"enableCTA":{"type":"boolean"},"type":{"allOf":[{"$ref":"#/components/schemas/StageStepType"}]},"done":{"type":"boolean"},"id":{"type":"string"},"dealStageId":{"type":"string"},"dueDate":{"format":"date-time","type":"string"},"tasks":{"type":"array","items":{"$ref":"#/components/schemas/StageStepTask"}},"cta":{"$ref":"#/components/schemas/StepCTA"},"internalOwner":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/User"}]},"internalOwnerId":{"type":"string","nullable":true},"owner":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CustomerContact"}]},"ownerId":{"type":"string","nullable":true},"internalCreatedById":{"type":"string","nullable":true},"createdById":{"type":"string","nullable":true},"internalStakeholders":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"internalStakeholderIds":{"type":"array","items":{"type":"string"}},"stakeholders":{"type":"array","items":{"$ref":"#/components/schemas/CustomerContact"}},"stakeholderIds":{"type":"array","items":{"type":"string"}},"comments":{"type":"array","items":{"$ref":"#/components/schemas/StepComment"}},"commentIds":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"$ref":"#/components/schemas/DealStepResource"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["index","title","description","isInternal","enableCTA","type","done","id","dealStageId","tasks","internalStakeholderIds","stakeholderIds","commentIds","resources","createdAt","updatedAt"]},"DealStage":{"type":"object","properties":{"index":{"type":"number"},"name":{"type":"string"},"duration":{"type":"number"},"done":{"type":"boolean"},"dueDate":{"format":"date-time","type":"string","nullable":true},"isInternal":{"type":"boolean"},"id":{"type":"string"},"dealId":{"type":"string"},"stageSteps":{"type":"array","items":{"$ref":"#/components/schemas/DealStageStep"}},"stageStepIds":{"type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["index","name","duration","done","isInternal","id","dealId","stageStepIds","createdAt","updatedAt"]},"CrmCompany":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"size":{"enum":["1-10","11-50","51-200","201-500","501-1000","1001+"],"type":"string"},"website":{"type":"string"},"phoneNumber":{"type":"string"},"address":{"$ref":"#/components/schemas/Address"},"notes":{"type":"string"},"owner":{"$ref":"#/components/schemas/User"},"ownerId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"customFields":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"}},"required":["id","name","address","company","companyId","createdAt","updatedAt"]},"CustomerCompany":{"type":"object","properties":{"name":{"type":"string"},"logo":{"type":"string"},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"website":{"type":"string"},"crmCompany":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CrmCompany"}]},"crmCompanyId":{"type":"string","nullable":true},"domain":{"type":"string"},"description":{"type":"string"},"slogan":{"type":"string"},"darkLogo":{"type":"string","description":"Dark-mode logo URL from brand.dev"},"backdropUrl":{"type":"string","description":"Backdrop / hero image URL from brand.dev"},"colors":{"description":"Brand color palette (hex strings)","type":"array","items":{"type":"string"}},"socials":{"type":"object","description":"Social profile URLs keyed by platform (e.g. { linkedin: '...' })"},"links":{"type":"object","description":"Key website links (privacy, terms, blog, etc.)"},"phone":{"type":"string"},"contactEmail":{"type":"string"},"industry":{"type":"string"},"subindustry":{"type":"string"},"ticker":{"type":"string","description":"Stock ticker symbol (e.g. \"AAPL\")"},"exchange":{"type":"string","description":"Stock exchange (e.g. \"NASDAQ\")"},"address":{"type":"object","description":"Registered address from brand.dev"},"isEnriched":{"type":"boolean","description":"True once brand.dev enrichment has been applied"},"enrichedAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"companyId":{"type":"string"},"deals":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"dealIds":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/CustomerContact"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["name","isEnriched","id","companyId","dealIds","createdAt","updatedAt"]},"ShowcaseHubSettings":{"type":"object","properties":{"requireEmail":{"type":"boolean"},"requiredPassword":{"type":"string","description":"If null, password won't be required","nullable":true},"disableComments":{"type":"boolean"},"disableStatus":{"type":"boolean"},"allowCustomerUploads":{"type":"boolean","description":"Allow viewers to upload documents to this hub"}},"required":["requireEmail","requiredPassword","disableComments","disableStatus","allowCustomerUploads"]},"ShowcaseVisibility":{"type":"string","enum":["hidden","locked","visible"]},"ShowcaseStepStatus":{"type":"string","enum":["todo","wip","done","cancelled"]},"ShowcaseStepThumbnail":{"type":"object","properties":{"icon":{"type":"string"},"image":{"type":"string","nullable":true,"description":"passing null will delete uploaded image"},"backgroundColor":{"type":"string"}}},"ShowcaseStepMessage":{"type":"object","properties":{"id":{"type":"string"},"message":{"type":"string"},"name":{"type":"string","description":"name of commenting meetergo user"},"picture":{"type":"string"},"createdBy":{"type":"string","description":"ID of commenting meetergo user"},"createdAt":{"type":"string"},"parentId":{"type":"string"},"email":{"type":"string","description":"Email of external user"}},"required":["id","message","createdAt"]},"ShowcaseStepTooltip":{"type":"object","properties":{"comment":{"type":"string"},"video":{"type":"string"}}},"Content":{"type":"object","properties":{"metadata":{"type":"object","description":"Accepts any json. Currently used properties:\n`url`: URL to the content (why we don't have a field for this I dont know)\n`bucketFileKey`: If file is stored in content bucket, the key for accessing directly in bucket\n(undefined if file is not stored by us)"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"},"saved":{"type":"boolean","description":"@default true"},"contentType":{"type":"string"},"showcaseSteps":{"type":"array","items":{"$ref":"#/components/schemas/ShowcaseStep"}},"dealSteps":{"type":"array","items":{"$ref":"#/components/schemas/DealStageStep"}},"userId":{"type":"string","description":"Owner"}},"required":["metadata","createdAt","updatedAt","id","name","saved","contentType"]},"ShowcaseStep":{"type":"object","properties":{"visibility":{"allOf":[{"$ref":"#/components/schemas/ShowcaseVisibility"}]},"status":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ShowcaseStepStatus"}]},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"title":{"type":"string"},"thumbnail":{"$ref":"#/components/schemas/ShowcaseStepThumbnail"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ShowcaseStepMessage"}},"tooltip":{"$ref":"#/components/schemas/ShowcaseStepTooltip"},"stageId":{"type":"string"},"asset":{"$ref":"#/components/schemas/Content"},"assetId":{"type":"string"},"allowDownload":{"type":"boolean"}},"required":["visibility","createdAt","updatedAt","id","title","thumbnail","messages","tooltip","stageId","allowDownload"]},"ShowcaseStage":{"type":"object","properties":{"visibility":{"allOf":[{"$ref":"#/components/schemas/ShowcaseVisibility"}]},"status":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ShowcaseStepStatus"}]},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"title":{"type":"string"},"showcaseId":{"type":"string"},"showcaseStep":{"type":"array","items":{"$ref":"#/components/schemas/ShowcaseStep"}},"stepOrder":{"type":"array","items":{"type":"string"}}},"required":["visibility","createdAt","updatedAt","id","title","showcaseId","stepOrder"]},"Showcase":{"type":"object","properties":{"slug":{"type":"string","nullable":true},"internalNotes":{"type":"string","nullable":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"publicOwner":{"$ref":"#/components/schemas/PublicUserInfo"},"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"isTemplate":{"type":"boolean"},"closed":{"type":"boolean"},"settings":{"$ref":"#/components/schemas/ShowcaseHubSettings"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/ShowcaseStage"}},"stageOrder":{"type":"array","items":{"type":"string"}},"companyId":{"type":"string"},"ownerId":{"type":"string","description":"Owner"},"deals":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"customerCompany":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CustomerCompany"}]},"customerCompanyId":{"type":"string"}},"required":["createdAt","updatedAt","id","name","description","isTemplate","closed","settings","stageOrder","companyId"]},"Deal":{"type":"object","properties":{"name":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","nullable":true},"description":{"type":"string"},"summary":{"type":"string"},"isApprovedPlaybook":{"type":"boolean"},"isPlaybook":{"type":"boolean"},"notificationConfig":{"$ref":"#/components/schemas/DealNotification"},"publicCompany":{"$ref":"#/components/schemas/PublicCompanyInfo"},"publicOwner":{"$ref":"#/components/schemas/PublicUserInfo"},"publicInternalStakeholders":{"type":"array","items":{"$ref":"#/components/schemas/PublicUserInfo"}},"id":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"owner":{"$ref":"#/components/schemas/User"},"ownerId":{"type":"string"},"internalStakeholders":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"internalStakeholderIds":{"type":"array","items":{"type":"string"}},"dealStages":{"type":"array","items":{"$ref":"#/components/schemas/DealStage"}},"dealStageIds":{"type":"array","items":{"type":"string"}},"stakeholders":{"type":"array","items":{"$ref":"#/components/schemas/CustomerContact"}},"stakeholderIds":{"type":"array","items":{"type":"string"}},"customerCompany":{"$ref":"#/components/schemas/CustomerCompany"},"customerCompanyId":{"type":"string"},"showcases":{"type":"array","items":{"$ref":"#/components/schemas/Showcase"}},"showcaseIds":{"type":"array","items":{"type":"string"}},"showcaseOrder":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/DealNotification"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["name","title","description","summary","isApprovedPlaybook","isPlaybook","notificationConfig","id","companyId","ownerId","internalStakeholderIds","dealStageIds","stakeholderIds","showcaseIds","showcaseOrder","createdAt","updatedAt"]},"ScheduledReminder":{"type":"object","properties":{"reminder":{"nullable":true,"description":"Links to the Reminder workflow configuration.\nSet when scheduled from a workflows reminder (has a Reminder entity).\nNull when scheduled from meeting type communication settings (inline config, no Reminder entity).","allOf":[{"$ref":"#/components/schemas/Reminder"}]},"appointment":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Appointment"}]},"scheduledEmailIds":{"type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"number"},"type":{"type":"object","description":"Whether reminder is scheduled in email state machine or sms state machine (sms\nstate machine is a general one but called sms here for simplicity). At the time\nof migration all scheduled reminders are email."},"reminderId":{"type":"number","nullable":true},"appointmentId":{"type":"string"}},"required":["scheduledEmailIds","createdAt","updatedAt","id","type","appointmentId"]},"HostingInfo":{"type":"object","properties":{"mainHost":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/User"}]},"meetingLink":{"type":"string","nullable":true},"googleEventId":{"type":"string","nullable":true},"googleConnectionSub":{"type":"string","nullable":true},"calendarConnectionId":{"type":"string","nullable":true},"zoomMeetingId":{"type":"string","nullable":true},"connectChannelId":{"type":"string","nullable":true},"wherebyMeetingId":{"type":"string","nullable":true}}},"BookingActionSource":{"type":"string","enum":["attendee","company","host"]},"BookingActionInfo":{"type":"object","properties":{"actionAt":{"format":"date-time","type":"string"},"actionBy":{"type":"object"},"actionSource":{"allOf":[{"$ref":"#/components/schemas/BookingActionSource"}]},"reason":{"type":"string"}},"required":["actionAt","actionBy","actionSource","reason"]},"MeetingCRMOptions":{"type":"object","properties":{"hubspotContactSync":{"type":"boolean"},"hubspotContactStage":{"type":"string"},"hubspotCompanySync":{"type":"boolean"},"hubspotCompanyStage":{"type":"string"},"hubspotCompanyMatchingField":{"type":"string"},"hubspotDealSync":{"type":"boolean"},"hubspotDealStage":{"type":"string"},"hubspotPipelineId":{"type":"string"},"pipedriveDealSync":{"type":"boolean"},"pipedriveContactSync":{"type":"boolean"},"pipedrivePipelineId":{"type":"number","nullable":true},"pipedriveStageId":{"type":"number","nullable":true},"pipedriveUseExistingDeal":{"type":"boolean"},"closeDealSync":{"type":"boolean"},"closeContactSync":{"type":"boolean"},"closePipelineId":{"type":"object","nullable":true},"closeStatusId":{"type":"object","nullable":true},"closeUseExistingDeal":{"type":"boolean"},"centralStationContactSync":{"type":"boolean"},"centralStationDealSync":{"type":"boolean"},"centralStationPipelineId":{"type":"number","nullable":true},"centralStationStageId":{"type":"number","nullable":true},"linkandoSyncEnabled":{"type":"boolean"},"linkandoPlaybookId":{"type":"number","nullable":true},"linkandoTemplateId":{"type":"number","nullable":true},"evalancheEnabled":{"type":"boolean"},"klicktippEnabled":{"type":"boolean"},"getResponseEnabled":{"type":"boolean"},"getResponseCampaignId":{"type":"string","nullable":true},"brevoEnabled":{"type":"boolean"},"sevdeskEnabled":{"type":"boolean"},"sevdeskCategoryId":{"type":"number","nullable":true},"lexwareEnabled":{"type":"boolean"},"professionalWorksEnabled":{"type":"boolean"},"smartWeContactSync":{"type":"boolean"},"smartWeCompanySync":{"type":"boolean"},"smartWeDealSync":{"type":"boolean"},"smartWeDealStage":{"type":"string"},"salesforceSyncEnabled":{"type":"boolean"},"salesforceCaseSync":{"type":"boolean"},"salesforceLeadSync":{"type":"boolean"},"salesforceOpportunitySync":{"type":"boolean"},"salesforceLeadStatus":{"type":"string"},"salesforceCaseStatus":{"type":"string"},"salesforceOpportunityStage":{"type":"string"},"salesforceDefaultObjectType":{"type":"string"},"internalCrmPipelineId":{"type":"object","nullable":true},"internalCrmStageId":{"type":"object","nullable":true},"crmOptInFieldName":{"type":"object","nullable":true}},"required":["hubspotContactSync","hubspotContactStage","hubspotCompanySync","hubspotCompanyStage","hubspotCompanyMatchingField","hubspotDealSync","hubspotDealStage","hubspotPipelineId","pipedriveDealSync","pipedriveContactSync","pipedrivePipelineId","pipedriveStageId","pipedriveUseExistingDeal","closeDealSync","closeContactSync","closePipelineId","closeStatusId","closeUseExistingDeal","centralStationContactSync","centralStationDealSync","centralStationPipelineId","centralStationStageId","linkandoSyncEnabled","linkandoPlaybookId","linkandoTemplateId","evalancheEnabled","klicktippEnabled","getResponseEnabled","getResponseCampaignId","brevoEnabled","sevdeskEnabled","sevdeskCategoryId","lexwareEnabled","professionalWorksEnabled","smartWeContactSync","smartWeCompanySync","smartWeDealSync","smartWeDealStage","salesforceSyncEnabled","salesforceCaseSync","salesforceLeadSync","salesforceOpportunitySync","salesforceLeadStatus","salesforceCaseStatus","salesforceOpportunityStage","salesforceDefaultObjectType","internalCrmPipelineId","internalCrmStageId","crmOptInFieldName"]},"AttendeeEnrichment":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"object","description":"Old type is `CompanyDetails`, but api was updated.\nIts not clear when the type was updated, but the type after at least `2025-06-02` is `CompanyV2`."},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string","description":"Not generated. Set to attendee id."},"attendee":{"$ref":"#/components/schemas/Attendee"}},"required":["name","data","id","attendee"]},"Attendee":{"type":"object","properties":{"email":{"type":"string","description":"Attendee email address. Present for all standard bookings.\nNull only for phone-only bookings (`BookingDto.phoneOnlyBooking`)\nwhere `phone` is the identifier instead.","nullable":true},"fullname":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"bringalongEmails":{"type":"array","items":{"type":"string"}},"notes":{"type":"object"},"receiveReminders":{"type":"boolean"},"phone":{"type":"string"},"language":{"type":"string"},"timezone":{"type":"string"},"noShow":{"type":"boolean"},"dataPolicyAccepted":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"secret":{"type":"string"},"appointment":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Appointment"}]},"attendeeEnrichment":{"$ref":"#/components/schemas/AttendeeEnrichment"},"doubleOptIn":{"format":"date-time","type":"string","description":"Timestamp when user confirmed double opt in email. Null if user didn't\nconfirm. Only relevant if ^.doubleOptIn is enabled. Otherwise this\ncan be ignored"}},"required":["bringalongEmails","notes","receiveReminders","language","timezone","noShow","dataPolicyAccepted","createdAt","updatedAt","id","secret"]},"QueueType":{"type":"string","enum":["simpleRoundRobin","advancedRoundRobin","equalDistribution"]},"RoutingAction":{"type":"string","enum":["customPage","externalRedirect","eventRedirect","requestCallback","contactForm","instantCall","formRedirect"]},"Qualifier":{"type":"object","properties":{"index":{"type":"number"},"routingAction":{"allOf":[{"$ref":"#/components/schemas/RoutingAction"}]},"isFallback":{"type":"boolean"},"queue":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Queue"}]},"meetingType":{"nullable":true,"description":"Meeeting type to redirect to","allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"meetingTypeUser":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/User"}]},"form":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Form"}]},"redirectForm":{"nullable":true,"description":"Form to redirect to","allOf":[{"$ref":"#/components/schemas/Form"}]},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"contactFormEmail":{"type":"string"},"externalRedirectLink":{"type":"string"},"customPageContent":{"$ref":"#/components/schemas/LocalisedContent"},"customFormTitle":{"$ref":"#/components/schemas/LocalisedContent"},"showThankYouOnCustomPage":{"type":"boolean"},"expression":{"$ref":"#/components/schemas/Expression"},"queueId":{"type":"string"},"meetingTypeId":{"type":"string"},"meetingTypeUserId":{"type":"string"},"formId":{"type":"string"},"redirectFormId":{"type":"string"}},"required":["index","routingAction","isFallback","form","createdAt","updatedAt","id","showThankYouOnCustomPage","expression","formId"]},"ReviewSectionItem":{"type":"object","properties":{"title":{"type":"string","description":"Primary label \u2014 e.g. stat value, step title, FAQ question, badge label"},"body":{"type":"string","description":"Secondary text \u2014 e.g. stat caption, step description, FAQ answer"},"icon":{"type":"string","description":"Optional icon identifier for trust badges (shield, lock, globe, check)"}}},"ReviewPageSection":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether this section is rendered on the public page","default":true},"title":{"type":"string","description":"Heading shown at the top of the section"},"body":{"type":"string","description":"Rich-text body (sanitized HTML produced by the dashboard editor)"},"imageUrl":{"type":"string","description":"Public URL of an image to render in this section"},"videoAssetId":{"type":"string","description":"Reference to an uploaded VideoAsset. Used to look up the latest playlist URL when rendering."},"videoUrl":{"type":"string","description":"HLS playlist URL for the section video (snapshot of the asset)"},"videoThumbnailUrl":{"type":"string","description":"Thumbnail/poster URL for the section video"},"ctaLabel":{"type":"string","description":"Optional CTA button label"},"ctaUrl":{"type":"string","description":"Optional CTA destination URL"},"items":{"description":"Repeated entries for sections that contain lists (stats, steps, FAQ, trust badges)","type":"array","items":{"$ref":"#/components/schemas/ReviewSectionItem"}}},"required":["enabled"]},"ReviewTemplate":{"type":"string","enum":["classic","hero_video","storytelling","bold_cta"]},"ReviewPageDesign":{"type":"object","properties":{"template":{"default":"classic","allOf":[{"$ref":"#/components/schemas/ReviewTemplate"}]},"accentColor":{"type":"string","description":"Brand accent colour applied to buttons / highlights (hex)"},"sections":{"type":"object","description":"Map of section key \u2192 content. Unknown keys are ignored by the renderer.","additionalProperties":{"$ref":"#/components/schemas/ReviewPageSection"}}},"required":["template","sections"]},"ReviewShareSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Show the share panel after submission","default":false},"headline":{"type":"string","description":"Panel headline"},"body":{"type":"string","description":"Short supporting copy under the headline"},"defaultMessage":{"type":"string","description":"Template text pre-filled when the reviewer picks a share channel. Supports the literal tokens {{companyName}} and {{reviewUrl}}."},"channels":{"type":"array","description":"Which channels to render","default":["linkedin","x","email","copy"],"items":{"type":"string","enum":["linkedin","x","email","copy"]}}},"required":["enabled","channels"]},"WorkspaceReviewSettings":{"type":"object","properties":{"reviewCollection":{"type":"boolean"},"autoApprove":{"type":"boolean"},"anonymousCollection":{"type":"boolean"},"showOnBooking":{"type":"boolean"},"syncToProvenExpert":{"type":"boolean"},"enableGoogleSnippet":{"type":"boolean"},"emailDelay":{"type":"string","enum":["1h","2h","3h","4h","next-day","1d","2d","3d"]},"showFloatingWidget":{"type":"boolean"},"googleReviewUrl":{"type":"string"},"showGoogleCta":{"type":"boolean"},"googleCtaMode":{"type":"string","enum":["all","gated"]},"googleCtaThreshold":{"type":"number"},"googlePlaceId":{"type":"string"},"reviewChannels":{"type":"array","items":{"type":"string","enum":["email","sms","whatsapp"]}},"pageDesign":{"$ref":"#/components/schemas/ReviewPageDesign"},"shareSettings":{"$ref":"#/components/schemas/ReviewShareSettings"}}},"Workspace":{"type":"object","properties":{"connectWaitingRoom":{"nullable":true,"description":"Per-team branding override for the connect prejoin/waiting screen.\nNull = inherit the company-wide settings.","allOf":[{"$ref":"#/components/schemas/ConnectWaitingRoomSettings"}]},"integrationPermissions":{"type":"object","description":"Workspace-level integration permission overrides.\nCan override company settings (allow or deny specific integrations)."},"customBookingCSS":{"type":"string","description":"Custom CSS for booking and confirmation pages.\nWhen set, this overrides the company-level customBookingCSS for this workspace's meeting types.\nApplied to both booking pages and confirmation/reschedule/cancel pages."},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string","description":"Slug must be unique"},"picture":{"type":"string","description":"Full url to workspace picture hosted statically"},"description":{"type":"string"},"primaryColor":{"type":"string"},"logoUrl":{"type":"string"},"language":{"enum":["en","de","fr","es","no","nl","it","pl","sv","tr","da"],"type":"string"},"salesforceStudioId":{"type":"string","description":"Salesforce Studio__c Record ID\nUsed for K\u00fcche&Co integration to link Cases to Studios","example":"a027R00000rdOS1QAM"},"useCompanyDefaultColor":{"type":"boolean"},"useCompanyDefaultLanguage":{"type":"boolean"},"useCompanyDefaultLogo":{"type":"boolean"},"useCompanyDefaultContactInfo":{"type":"boolean"},"showTeamSection":{"type":"boolean"},"showServicesSection":{"type":"boolean"},"showCompanyDetails":{"type":"boolean"},"showContactInfo":{"type":"boolean"},"emailAddress":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"address":{"type":"string"},"privacyUrl":{"type":"string"},"imprintUrl":{"type":"string"},"emailSenderName":{"type":"string","description":"Email sender name. Only name part of sender string without email."},"emailSenderAddress":{"type":"string","description":"Email sender address. Only email part of sender string.\nOnly active if custom smtp is active. Otherwise this is ignored."},"enableCustomLegalText":{"description":"Enable/disable custom legal text","enum":["Enable","Disable","Inherit"],"type":"string"},"customLegalText":{"type":"string","description":"Custom legal text HTML, shown above booking button if enabled"},"reviewSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/WorkspaceReviewSettings"}]},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"users":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"adminUsers":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"analyticsViewers":{"description":"Analytics-only viewers of this team. They can see this workspace's\nanalytics (scoped to its members) but get no admin or edit rights \u2014\ndeliberately separate from `adminUsers`, which the meeting-type edit\ngates key off. Used for the \"analytics for employees\" role.","type":"array","items":{"$ref":"#/components/schemas/User"}},"meetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"queues":{"type":"array","items":{"$ref":"#/components/schemas/Queue"}},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"forms":{"type":"array","items":{"$ref":"#/components/schemas/Form"}}},"required":["createdAt","updatedAt","id","name","slug","useCompanyDefaultColor","useCompanyDefaultLanguage","useCompanyDefaultLogo","useCompanyDefaultContactInfo","showTeamSection","showServicesSection","showCompanyDetails","showContactInfo","enableCustomLegalText","companyId"]},"UserCapacity":{"type":"object","properties":{"userId":{"type":"string","description":"User ID"},"capacity":{"type":"number","description":"Capacity value"}},"required":["userId","capacity"]},"UserPriority":{"type":"object","properties":{"userId":{"type":"string","description":"User ID"},"priority":{"type":"number","description":"Priority level (higher = booked first)"}},"required":["userId","priority"]},"UserCustomLink":{"type":"object","properties":{"userId":{"type":"string","description":"User ID"},"link":{"type":"string","description":"Per-host override for the custom meeting link. Empty string means fall back to the meeting type default."}},"required":["userId","link"]},"Queue":{"type":"object","properties":{"type":{"allOf":[{"$ref":"#/components/schemas/QueueType"}]},"roundRobinEntries":{"type":"array","items":{"$ref":"#/components/schemas/RoundRobinEntry"}},"meetingType":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"qualifiers":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Qualifier"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"workspace":{"nullable":true,"description":"Workspace the queue is in. Before team update, all queues\nwere always created in a workspace. Now, does not need to\nbelong to workspace, as there can be round robin meeting\ntypes without workspace but with queue (rr/collective)","allOf":[{"$ref":"#/components/schemas/Workspace"}]},"workspaceId":{"type":"string"},"oldMeetingType":{"nullable":true,"deprecated":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"meetingTypeId":{"type":"string","description":"Currently, there are several fields with value null in prod.\nI'm not sure if that does anything. I suspect that all\nrows with null meeting type id are orphaned.\n@todo confirm theory and migrate to non nullable"},"userCapacities":{"type":"array","items":{"$ref":"#/components/schemas/UserCapacity"}},"userPriorities":{"type":"array","items":{"$ref":"#/components/schemas/UserPriority"}},"userCustomLinks":{"description":"Per-host overrides resolved by `CalendarLinkService.addMeetingLink` (CUSTOM channel).","type":"array","items":{"$ref":"#/components/schemas/UserCustomLink"}},"maxLeadThreshold":{"type":"number","description":"Maximum number of bookings a host can be ahead of the least-booked host\nbefore their availability is hidden. Ensures fair distribution."},"distributionPeriod":{"type":"object","description":"Period over which bookings are counted for equal distribution.\nCounts reset at the start of each period."},"prioritizeNearTermAvailability":{"type":"boolean","description":"When true, if fairness filtering (maxLeadThreshold) would push the next\navailable slot more than 14 days beyond the meeting type's minimum booking\nnotice, temporarily include over-lead hosts so bookers aren't penalized by\nfairness enforcement. Disable only if strict fairness must never yield to\nbooker-visible availability."},"userGroups":{"type":"array","items":{"$ref":"#/components/schemas/QueueUserGroup"}},"userGroupIds":{"type":"array","items":{"type":"string"}},"companyId":{"type":"string","description":"Not null"},"users":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"userIds":{"type":"array","items":{"type":"string"}}},"required":["type","roundRobinEntries","createdAt","updatedAt","id","meetingTypeId","userCapacities","userPriorities","userCustomLinks","maxLeadThreshold","distributionPeriod","prioritizeNearTermAvailability","userGroups","userGroupIds","companyId","userIds"]},"QueueUserGroup":{"type":"object","properties":{"createdAt":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"},"capacity":{"type":"number"},"users":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"userIds":{"type":"array","items":{"type":"string"}},"queue":{"$ref":"#/components/schemas/Queue"},"queueId":{"type":"string"},"mainGroupHost":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/User"}]},"mainGroupHostId":{"type":"string","nullable":true}},"required":["createdAt","updatedAt","id","name","capacity","users","userIds","queueId"]},"RoundRobinEntry":{"type":"object","properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"number"},"userId":{"type":"string","nullable":true},"group":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/QueueUserGroup"}]},"groupId":{"type":"string","nullable":true},"appointmentId":{"type":"string","nullable":true},"queue":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Queue"}]},"queueId":{"type":"string"},"selectionReason":{"type":"string","description":"Reason why host was selected.\n- `queue`: Host was the next host in queue\n- `nextAvailableHost`: Next queue host was not available\ndue to calendar event so host was chosen\n- Past entries are null so that information is not known"}},"required":["createdAt","id"]},"AppointmentResolvableError":{"type":"object","properties":{"appointmentId":{"type":"string"},"appointment":{"$ref":"#/components/schemas/Appointment"},"errorCode":{"type":"string","description":"Error code identifies the error, defined in ErrorCode enum.\nDefined as string to avoid having to migrate DB every time new error is implemented."},"deletedAt":{"format":"date-time","type":"string","nullable":true}},"required":["appointmentId","errorCode"]},"BufferReservation":{"type":"object","properties":{"id":{"type":"number"},"appointment":{"description":"The appointment this buffer is reserved for.\nWhen appointment is deleted, buffer reservations are cascade deleted.","allOf":[{"$ref":"#/components/schemas/Appointment"}]},"appointmentId":{"type":"string"},"bufferType":{"description":"Whether this is a buffer before or after the meeting","enum":["before","after"],"type":"string"},"start":{"format":"date-time","type":"string","description":"Start time of this buffer segment"},"end":{"format":"date-time","type":"string","description":"End time of this buffer segment"},"duration":{"type":"number","description":"Duration of this specific segment in minutes"},"segmentIndex":{"type":"number","description":"Index of this segment (0-based) when buffer is split"},"totalSegments":{"type":"number","description":"Total number of segments for this buffer"},"originalBufferMinutes":{"type":"number","description":"Original total buffer requirement in minutes"},"companyId":{"type":"string","description":"Company ID for multi-tenant isolation"},"calendarEventId":{"type":"string","description":"Calendar event ID for synced buffer event\nStored when buffer is synced to user's calendar (Google, Outlook, etc.)\nUsed for updating/deleting the calendar event"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","appointment","appointmentId","bufferType","start","end","duration","segmentIndex","totalSegments","originalBufferMinutes","companyId","createdAt"]},"RecurringSeries":{"type":"object","properties":{"mode":{"description":"Mode of the series - recurring pattern or multi-slot selection","enum":["recurring","multi_slot"],"type":"string"},"frequency":{"nullable":true,"description":"Frequency of the recurring series (only set for RECURRING mode)","enum":["weekly","biweekly","monthly"],"type":"string"},"totalOccurrences":{"type":"number","description":"Total number of occurrences in this series"},"isCancelled":{"type":"boolean","description":"Whether the entire series has been cancelled"},"cancelledAt":{"format":"date-time","type":"string","description":"Timestamp when the series was cancelled"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"secret":{"type":"string","description":"Secret for booker access to cancel the series"},"appointments":{"description":"All appointments in this series","type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"meetingType":{"description":"Meeting type this series belongs to","allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"meetingTypeId":{"type":"string"},"company":{"description":"Company this series belongs to","allOf":[{"$ref":"#/components/schemas/Company"}]},"companyId":{"type":"string"}},"required":["mode","totalOccurrences","isCancelled","createdAt","updatedAt","id","secret","meetingTypeId","companyId"]},"BundleLocalizedContent":{"type":"object","properties":{"locale":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["locale","name"]},"MeetingTypeBundle":{"type":"object","properties":{"id":{"type":"string"},"companyId":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"localizedContent":{"description":"Localized content for bundle name and description in different languages.","type":"array","items":{"$ref":"#/components/schemas/BundleLocalizedContent"}},"meetingTypeIds":{"type":"array","items":{"type":"string"}},"meetingTypeCategories":{"type":"object","description":"Custom category mapping for meeting types. Keys are meeting type IDs, values are category names.","example":{"uuid-1":"Consultation","uuid-2":"Treatment"}},"categoryOrder":{"description":"Order of categories for display purposes.","example":["Consultation","Treatment","Follow-up"],"type":"array","items":{"type":"string"}},"hideHeader":{"type":"boolean","description":"Whether to hide the header (company name, bundle title, description) on the booking page."},"minSelections":{"type":"number"},"maxSelections":{"type":"number"},"hostSelectionMode":{"enum":["per_meeting_type","single","queue"],"type":"string"},"discountType":{"enum":["none","percentage","fixed"],"type":"string"},"discountValue":{"type":"number"},"enabled":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"company":{"$ref":"#/components/schemas/Company"},"appointments":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}}},"required":["id","companyId","name","slug","meetingTypeIds","minSelections","hostSelectionMode","enabled","createdAt","updatedAt"]},"AppointmentBundleItem":{"type":"object","properties":{"id":{"type":"string"},"appointmentId":{"type":"string"},"meetingTypeId":{"type":"string"},"duration":{"type":"number"},"price":{"type":"number"},"hostIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"appointment":{"$ref":"#/components/schemas/Appointment"},"meetingType":{"$ref":"#/components/schemas/MeetingType"}},"required":["id","appointmentId","meetingTypeId","duration","hostIds","sortOrder","createdAt"]},"Appointment":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"},"isCancelled":{"type":"boolean","description":"Determines whether appointment was cancelled"},"spots":{"type":"number","nullable":true,"description":"Per-appointment capacity for group bookings. Copied from meetingType.spots\nat creation time. Can be reduced to limit new bookees without cancelling\nexisting attendees.\n\nWhen null, falls back to meetingType.spots.\n\nTODO: Ideally spots should be part of MeetingInfo (alongside groupBooking)\nso it gets copied naturally via the meetingInfo spread. Kept as top-level\nfor now to avoid refactoring the existing meetingType.spots column + V4 API DTOs."},"rescheduledAt":{"format":"date-time","type":"string","description":"Timestamp when appointment was rescheduled. Null if appointment is\nnot rescheduled."},"rescheduleCount":{"type":"number","description":"Number of times this appointment has been rescheduled.\nUsed as the ICS SEQUENCE number so calendar clients recognize updates."},"location":{"type":"string"},"scheduledReminders":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledReminder"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"couponCode":{"type":"string","description":"Coupon code applied to this booking's payment (null if no coupon used)"},"couponDiscountAmount":{"type":"number","description":"Discount amount applied via coupon (in the payment currency)"},"note":{"type":"string"},"transcription":{"type":"string","nullable":true,"description":"Full meeting transcription in markdown format"},"summary":{"type":"string","nullable":true,"description":"AI-generated summary of the meeting in markdown format"},"occurrenceNumber":{"type":"number","nullable":true,"description":"Position of this appointment within the recurring series (1-based).\nNull for non-recurring appointments."},"isBundleBooking":{"type":"boolean"},"id":{"type":"string"},"secret":{"type":"string"},"ics":{"type":"string"},"meetingInfo":{"$ref":"#/components/schemas/MeetingInfo"},"hostingInfo":{"$ref":"#/components/schemas/HostingInfo"},"cancel":{"$ref":"#/components/schemas/BookingActionInfo"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"attendees":{"type":"array","items":{"$ref":"#/components/schemas/Attendee"}},"attendeeIds":{"type":"array","items":{"type":"string"}},"roundRobinEntries":{"type":"array","items":{"$ref":"#/components/schemas/RoundRobinEntry"}},"meetingType":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"meetingTypeId":{"type":"string","description":"@todo should not be nullable, but prod has some null values also recently"},"hostIds":{"type":"array","items":{"type":"string"}},"companyId":{"type":"string"},"resolvableErrors":{"type":"array","items":{"$ref":"#/components/schemas/AppointmentResolvableError"}},"bufferReservations":{"type":"array","items":{"$ref":"#/components/schemas/BufferReservation"}},"paymentId":{"type":"string"},"recurringSeries":{"nullable":true,"description":"Reference to the recurring series this appointment belongs to.\nNull for non-recurring appointments.","allOf":[{"$ref":"#/components/schemas/RecurringSeries"}]},"recurringSeriesId":{"type":"string","nullable":true},"bundle":{"nullable":true,"description":"Reference to the bundle this appointment was booked from.\nNull for non-bundle bookings.","allOf":[{"$ref":"#/components/schemas/MeetingTypeBundle"}]},"bundleId":{"type":"string","nullable":true},"bundleItems":{"description":"Bundle items for this appointment (details of each meeting type in the bundle).\nOnly populated for bundle bookings.","type":"array","items":{"$ref":"#/components/schemas/AppointmentBundleItem"}}},"required":["start","end","isCancelled","rescheduleCount","createdAt","updatedAt","isBundleBooking","id","secret","ics","meetingInfo","hostingInfo","cancel","crmOptions","attendeeIds","meetingTypeId","hostIds","companyId"]},"TemplateCategory":{"type":"string","enum":["bookingConfirmed","bookingCanceled","bookingRescheduled","other"]},"EmailTemplateContent":{"type":"object","properties":{"locale":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"}},"required":["locale","title","content"]},"ReminderChannel":{"type":"string","enum":["email","sms","whatsapp"],"description":"Channel that the message is intended for. There are different requirements\nfor each channel. For example, \"sms\" has a shorter character limit."},"ReminderActionType":{"type":"string","enum":["send-message","add-label","remove-label","assign-conversation","mark-done","create-note","edit-contact-attribute","ai-generate"],"description":"What the action does. Legacy actions default to `SEND_MESSAGE` so\nexisting rows keep their behaviour. Conversation-mutation variants\n(label, assign, note, ...) only fire on inbound WhatsApp triggers."},"ReminderRecipient":{"type":"string","enum":["guest-all","host-all","everyone","company-user","custom-email","form-recipient","form-sender","deal-owner","deal-primary-contact","deal-contacts","lead-contact"]},"ReminderTrigger":{"type":"object","properties":{"trigger":{"allOf":[{"$ref":"#/components/schemas/ReminderTrigger"}]},"id":{"type":"number"},"triggerTiming":{"type":"number","description":"Time in minutes before or after specified trigger to wait for, before sending the reminder"},"targetStageId":{"type":"string","nullable":true,"description":"Optional target stage ID for DEAL_ENTERED_STAGE trigger.\nWhen set, the trigger only fires when a deal enters this specific stage."},"conditions":{"nullable":true,"description":"Optional gating conditions for the trigger.\nUsed by inbound WhatsApp triggers (`WHATSAPP_MESSAGE_RECEIVED`,\n`WHATSAPP_CONVERSATION_STARTED`) to match keywords / labels / contact\nattributes before firing the action chain.\n\nAND across the array; OR within `values`. Null/empty means \"no filter\".","type":"array","items":{"type":"object"}},"reminder":{"$ref":"#/components/schemas/Reminder"},"actions":{"type":"array","items":{"$ref":"#/components/schemas/ReminderAction"}}},"required":["trigger","id","triggerTiming","actions"]},"ReminderAction":{"type":"object","properties":{"channel":{"allOf":[{"$ref":"#/components/schemas/ReminderChannel"}]},"actionType":{"description":"What the action does. Legacy actions default to `SEND_MESSAGE` so\nexisting rows keep their behaviour. Conversation-mutation variants\n(label, assign, note, ...) only fire on inbound WhatsApp triggers.","allOf":[{"$ref":"#/components/schemas/ReminderActionType"}]},"conversationActionConfig":{"type":"object","nullable":true,"description":"Configuration blob for non-message action types \u2014 ignored when\n`actionType === SEND_MESSAGE`. Stored as JSONB so we can extend the\nshape per action variant without further schema changes.","additionalProperties":true},"recipient":{"allOf":[{"$ref":"#/components/schemas/ReminderRecipient"}]},"content":{"type":"array","items":{"$ref":"#/components/schemas/EmailTemplateContent"}},"whatsappTemplateName":{"type":"string","nullable":true},"messageText":{"type":"string","nullable":true,"description":"Free-form WhatsApp text body. Used by inbound automation actions that\nreply inside the 24h customer service window \u2014 no template needed.\n\nSet independently from `whatsappTemplateName`. The inbound automation\nrunner only consults `messageText`; outbound (template-based) reminders\nonly consult `whatsappTemplateName`. Whichever channel/runner picks up\nthe action decides which field to read."},"messageButtons":{"type":"array","nullable":true,"description":"Optional WhatsApp interactive reply buttons to attach to a free-form\n`messageText` reply. When set, the inbound automation listener will send\nan `interactive` (type: button) message instead of plain text. Inactive\noutside the 24-hour customer service window \u2014 Meta only allows\ninteractive messages as session messages or via approved templates.\n\nConstraints:\n  \u2022 Up to 3 buttons (Meta limit).\n  \u2022 `title` \u2264 20 characters.\n  \u2022 `id` is the value reported back via webhook when a user taps a\n    button. Default to a slug of the title when the user doesn't pick\n    one explicitly.","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}}}},"variableMappings":{"type":"object","nullable":true,"additionalProperties":{"type":"string"}},"whatsappChannelId":{"type":"string","nullable":true},"whatsappPhoneNumberId":{"type":"string","nullable":true,"description":"Phone number ID to send from for direct Meta integration (overrides default from config)"},"whatsappTemplateLanguage":{"type":"string","nullable":true,"description":"Language code for the Meta WhatsApp template (e.g. 'en_US'). Only used with direct Meta integration."},"recipientEmail":{"type":"string","nullable":true,"description":"recipient email if reminder recipient is set to company user, null otherwise"},"attachmentConfig":{"type":"array","description":"Configuration for email attachments.\nSupports library files and booking form file fields.","items":{"type":"object","properties":{"type":{"type":"string","enum":["library","form_field"]},"fileAssetId":{"type":"string","nullable":true},"dataFieldName":{"type":"string","nullable":true}}},"nullable":true},"id":{"type":"number"},"reminderTrigger":{"$ref":"#/components/schemas/ReminderTrigger"},"template":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"templateId":{"type":"string"}},"required":["channel","actionType","recipient","content","recipientEmail","id"]},"EmailTemplate":{"type":"object","properties":{"category":{"allOf":[{"$ref":"#/components/schemas/TemplateCategory"}]},"content":{"type":"array","items":{"$ref":"#/components/schemas/EmailTemplateContent"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"reminderChannel":{"description":"Channel that the message is intended for. There are different requirements\nfor each channel. For example, \"sms\" has a shorter character limit.","allOf":[{"$ref":"#/components/schemas/ReminderChannel"}]},"id":{"type":"string"},"name":{"type":"string"},"reminderActions":{"type":"array","items":{"$ref":"#/components/schemas/ReminderAction"}},"permament":{"type":"boolean"},"companyId":{"type":"string"}},"required":["category","content","createdAt","updatedAt","reminderChannel","id","name","permament"]},"EmailTemplateSelection":{"type":"object","properties":{"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"string"},"companyId":{"type":"string"},"attendeeMeetingConfirmation":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingConfirmationId":{"type":"string"},"hostMeetingConfirmation":{"$ref":"#/components/schemas/EmailTemplate"},"hostMeetingConfirmationId":{"type":"string"},"attendeeMeetingCancelled":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingCancelledId":{"type":"string"},"hostMeetingCancelled":{"$ref":"#/components/schemas/EmailTemplate"},"hostMeetingCancelledId":{"type":"string"},"attendeeMeetingRescheduled":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingRescheduledId":{"type":"string"},"hostMeetingRescheduled":{"$ref":"#/components/schemas/EmailTemplate"},"hostMeetingRescheduledId":{"type":"string"},"bringalongMeetingConfirmation":{"$ref":"#/components/schemas/EmailTemplate"},"bringalongMeetingConfirmationId":{"type":"string"},"hostMeetingReassigned":{"$ref":"#/components/schemas/EmailTemplate"},"hostMeetingReassignedId":{"type":"string"},"attendeeMeetingHostChanged":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingHostChangedId":{"type":"string"},"attendeeMeetingCancelRequest":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingCancelRequestId":{"type":"string"},"attendeeMeetingRescheduleRequest":{"$ref":"#/components/schemas/EmailTemplate"},"attendeeMeetingRescheduleRequestId":{"type":"string"},"doubleOptInRequest":{"$ref":"#/components/schemas/EmailTemplate"},"doubleOptInRequestId":{"type":"string"},"requireHostConfirmation":{"$ref":"#/components/schemas/EmailTemplate"},"requireHostConfirmationId":{"type":"string"},"reviewRequestTemplate":{"$ref":"#/components/schemas/EmailTemplate"},"reviewRequestTemplateId":{"type":"string"},"waitlistNotification":{"$ref":"#/components/schemas/EmailTemplate"},"waitlistNotificationId":{"type":"string"}},"required":["createdAt","updatedAt","id"]},"DateMeta":{"type":"object","properties":{"created":{"format":"date-time","type":"string"},"updated":{"format":"date-time","type":"string"},"deleted":{"type":"string","nullable":true}},"required":["created","updated"]},"CompanyInvite":{"type":"object","properties":{"secret":{"type":"string"},"companyId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"expiry":{"format":"date-time","type":"string"},"email":{"type":"string","nullable":true,"default":null},"inviteType":{"description":"The type of user this invite will create.\n'standard' for regular team members, 'partner' for partner users.","enum":["standard","resource","api-platform","partner"],"type":"string"},"partnerPermissions":{"type":"object","nullable":true,"description":"Permissions to apply when a partner invite is accepted. Null for non-partner invites."},"meta":{"$ref":"#/components/schemas/DateMeta"}},"required":["secret","companyId","expiry","email","inviteType","meta"]},"HubspotConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"accessTokenExpiration":{"type":"string"},"synchronizedFields":{"type":"boolean","description":"Used for existing users to create custom properties on booking"}},"required":["companyId","refreshToken","accessToken","accessTokenExpiration","synchronizedFields"]},"PipedriveConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"accessTokenExpiration":{"type":"string"},"apiDomain":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"synchronizedFields":{"type":"boolean","description":"Used for existing users to create custom properties on booking"}},"required":["companyId","refreshToken","accessToken","accessTokenExpiration","apiDomain","scopes","synchronizedFields"]},"CloseConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"accessTokenExpiration":{"type":"string"},"apiDomain":{"type":"string","description":"Close has no per-tenant API domain like Pipedrive \u2014 every request\ngoes to api.close.com. Persisted for symmetry with other CRM\nconnections."},"scopes":{"type":"array","items":{"type":"string"}},"synchronizedFields":{"type":"boolean","description":"Set after custom fields are auto-created on first connect."}},"required":["companyId","refreshToken","accessToken","accessTokenExpiration","apiDomain","scopes","synchronizedFields"]},"CentralStationCrmConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string","nullable":true,"description":"Refresh token. 42he issues rotating refresh tokens on every refresh\nexchange \u2014 each one is single-use, with a 3-month idle expiry (after\nwhich the user must reconnect). The column is nullable to accommodate\nlegacy connections created before refresh tokens were enabled\n(2026-04); those rows will hit the \"please reconnect\" path on first\nrefresh and pick up a refresh token from there."},"accessToken":{"type":"string"},"accessTokenExpiration":{"type":"string","nullable":true,"description":"ISO timestamp at which `accessToken` expires. Currently ~2 hours from\nissue per 42he's config, but we always read `expires_in` from the\ntoken response rather than hard-coding. `null` only for legacy rows\ncreated before expiry was tracked. We pre-empt expiry by 60 seconds\nto avoid tight-edge races on long-running booking flows."},"scopes":{"type":"array","items":{"type":"string"}}},"required":["companyId","refreshToken","accessToken","accessTokenExpiration","scopes"]},"AmeiseConnection":{"type":"object","properties":{"companyId":{"type":"string"},"tenant":{"type":"string"},"baseUrl":{"type":"string"},"tenantName":{"type":"string"},"tokenName":{"type":"string"},"tokenExpiresAt":{"format":"date-time","type":"string","nullable":true}},"required":["companyId","tenant","baseUrl"]},"SalesforceConnection":{"type":"object","properties":{"utmFieldMappings":{"type":"object","description":"UTM parameter to Salesforce field mappings"},"isSandbox":{"type":"boolean","description":"Whether this connection uses a Salesforce Sandbox org"},"companyId":{"type":"string"},"id":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"signature":{"type":"string"},"instanceUrl":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"issuedAt":{"type":"string"}},"required":["isSandbox","companyId","id","refreshToken","accessToken","signature","instanceUrl","scopes","issuedAt"]},"SlackConnection":{"type":"object","properties":{"companyId":{"type":"string"},"teamId":{"type":"string"},"teamName":{"type":"string"},"botUserId":{"type":"string"},"channelMappings":{"type":"object","description":"Mapping of meeting type IDs to channel IDs\nFormat: { \"meetingTypeId\": { channelId: \"C123\", channelName: \"sales\" }, ... }\nEmpty object means no notifications"},"enabledEvents":{"description":"Which booking events trigger notifications","type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"}},"required":["companyId","teamId","teamName","botUserId","channelMappings","enabledEvents","createdAt"]},"IntercomMessengerConnection":{"type":"object","properties":{"companyId":{"type":"string"},"workspaceId":{"type":"string","description":"Intercom workspace identifier (`app.id_code`). Surfaced in the\nsettings UI so admins can verify they connected the right\nworkspace.\n\nUnique because a single Intercom workspace is the authoritative\nsource for canvas requests \u2014 if two meetergo Companies both\nconnected the same workspace, every Canvas Kit request would\nresolve to a non-deterministic Company. Re-installing from the\nsame workspace deletes the prior connection in\n`IntercomMessengerAuthService.connect`."},"workspaceName":{"type":"string","nullable":true},"region":{"type":"object","description":"Hosting region \u2014 Intercom serves EU and AU workspaces from\nseparate API hostnames (`api.eu.intercom.io`, `api.au.intercom.io`).\nDefaults to \"us\" when Intercom does not report a region.\n`varchar(8)` leaves headroom for future regional shards Intercom\nmight add (e.g. `latam`) without a column-resize migration."},"installedByAdminId":{"type":"string","nullable":true,"description":"Intercom admin id (the user who installed the app). Used for posting admin notes."},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["companyId","workspaceId","region","createdAt","updatedAt"]},"HubSubscription":{"type":"object","properties":{"companyId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"stripeSubscriptionId":{"type":"string"},"stripeSubscriptionItemId":{"type":"string","nullable":true,"description":"Stripe subscription item ID \u2014 set when this add-on is bundled as a line\nitem on the plan subscription. Null for legacy standalone subscriptions."},"subscriptionStatus":{"type":"object"},"slotsAmount":{"type":"number"},"assignedTo":{"description":"Users that can use this subscription. Cannot exceed slotsAmount * 2\n(each workspace covers 2 users). Empty means all company users have access.","type":"array","items":{"type":"string"}},"cancelAtPeriodEnd":{"type":"boolean","description":"True when the user has cancelled but the subscription is still in its paid period."},"currentPeriodEnd":{"format":"date-time","type":"string","nullable":true,"description":"The date the subscription ends (only set when cancelAtPeriodEnd is true)."}},"required":["companyId","stripeSubscriptionId","subscriptionStatus","slotsAmount","assignedTo","cancelAtPeriodEnd"]},"CrmSubscription":{"type":"object","properties":{"companyId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"stripeSubscriptionId":{"type":"string"},"stripeSubscriptionItemId":{"type":"string","nullable":true,"description":"Stripe subscription item ID \u2014 set when this add-on is bundled as a line\nitem on the plan subscription. Null for legacy standalone subscriptions."},"subscriptionStatus":{"type":"object"},"slotsAmount":{"type":"number","description":"Number of user seats purchased for CRM"},"assignedTo":{"description":"Users that can use this subscription. Cannot exceed slotsAmount.\nEmpty means all company users have access (backward compatibility).","type":"array","items":{"type":"string"}},"cancelAtPeriodEnd":{"type":"boolean","description":"True when the user has cancelled but the subscription is still in its paid period."},"currentPeriodEnd":{"format":"date-time","type":"string","nullable":true,"description":"The date the subscription ends (only set when cancelAtPeriodEnd is true)."}},"required":["companyId","stripeSubscriptionId","subscriptionStatus","slotsAmount","assignedTo","cancelAtPeriodEnd"]},"WhatsappSubscription":{"type":"object","properties":{"companyId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"stripeSubscriptionId":{"type":"string"},"stripeSubscriptionItemId":{"type":"string","nullable":true,"description":"Stripe subscription item ID \u2014 set when this add-on is bundled as a line\nitem on the plan subscription. Null for legacy standalone subscriptions."},"subscriptionStatus":{"type":"object"},"phoneNumbersAmount":{"type":"number","description":"Number of phone numbers purchased for WhatsApp."},"cancelAtPeriodEnd":{"type":"boolean","description":"True when the user has cancelled but the subscription is still in its paid period."},"currentPeriodEnd":{"format":"date-time","type":"string","nullable":true,"description":"The date the subscription ends (only set when cancelAtPeriodEnd is true)."}},"required":["companyId","stripeSubscriptionId","subscriptionStatus","phoneNumbersAmount","cancelAtPeriodEnd"]},"KlicktippConnection":{"type":"object","properties":{"id":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"customerKey":{"type":"string","description":"Klicktipp customer key"},"doiFieldId":{"type":"string","description":"Klicktipp field id for double opt in process to use"},"appointmentStartFieldId":{"type":"string","description":"Klicktipp field id for appointmennt start time"},"meetingLocationFieldId":{"type":"string","description":"Klicktipp field id for the meeting location\nresolves to meeting link for online channels\nresolves to address for local channel\notherwise resolves to channel name"},"meetingTypeNameFieldId":{"type":"string","description":"Klicktipp field id for meeting type name"},"meetingTypeDescriptionFieldId":{"type":"string","description":"Klicktipp field id for meeting type description"},"cancellationLinkFieldId":{"type":"string","description":"Klicktipp field id for booking cancellation link"},"rescheduleLinkFieldId":{"type":"string","description":"Klicktipp field id for booking reschedule link"},"bookingDateFieldId":{"type":"string","description":"Klicktipp field id for booking date"},"globalTagIds":{"description":"Global tag that is assigned to all contacts in klicktipp","type":"array","items":{"type":"string"}},"enableForAllMeetingTypes":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","company","companyId","customerKey","globalTagIds","enableForAllMeetingTypes","createdAt","updatedAt"]},"SmartWeCRMConnection":{"type":"object","properties":{"companyId":{"type":"string"},"email":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string"},"scope":{"type":"string"},"expiresAfter":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["companyId","email","accessToken","refreshToken","tokenType","scope","expiresAfter","createdAt","updatedAt"]},"StripeFeatureConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"scope":{"type":"string"},"stripeUserId":{"type":"string"},"token_type":{"type":"string"},"stripePublishableKey":{"type":"string"},"accessTokenExpiration":{"type":"string"}},"required":["companyId","accessToken","accessTokenExpiration"]},"PaypalFeatureConnection":{"type":"object","properties":{"companyId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"scope":{"type":"string"},"paypalPayerId":{"type":"string"},"tokenType":{"type":"string"},"nonce":{"type":"string"},"accessTokenExpiration":{"type":"string"},"paypalEmailAddress":{"type":"string"}},"required":["companyId","accessToken","paypalPayerId","accessTokenExpiration"]},"MollieFeatureConnection":{"type":"object","properties":{"companyId":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scope":{"type":"string"},"mollieOrganizationId":{"type":"string","description":"Mollie organization ID (org_xxxxxx); stored for ops/debugging."},"mollieProfileId":{"type":"string","description":"Profile ID \u2014 payments are tied to a specific Mollie profile (pfl_xxxxxx)."},"tokenType":{"type":"string"},"accessTokenExpiration":{"type":"string"},"webhookSecret":{"type":"string","description":"Per-company random secret embedded in this merchant's webhook URL\n(`/mollie-feature/hooks/:webhookSecret`). Anyone hitting the\nwebhook without the secret gets a 404; Mollie itself does not sign\nrequests so the unguessable path is the only inbound auth. The\nunique index lets webhook lookup hit O(1) without a full scan and\nguarantees no two merchants ever share the same path."},"needsReauth":{"type":"boolean","description":"Set when token refresh fails (revoked grant, scopes changed).\n`getConnection` rejects so callers surface \"reconnect Mollie\"."}},"required":["companyId","accessToken","webhookSecret","needsReauth"]},"AircallConnection":{"type":"object","properties":{"companyId":{"type":"string"},"accessToken":{"type":"string"},"tokenType":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["companyId","accessToken","tokenType","createdAt","updatedAt"]},"ReviewSettings":{"type":"object","properties":{"reviewCollection":{"type":"boolean","description":"Enable review collection after meetings","default":true},"autoApprove":{"type":"boolean","description":"Automatically approve new reviews","default":false},"showOnBooking":{"type":"boolean","description":"Show reviews on booking pages","default":true},"syncToProvenExpert":{"type":"boolean","description":"Sync reviews to ProvenExpert","default":false},"anonymousCollection":{"type":"boolean","description":"Allow anonymous reviews","default":false},"enableGoogleSnippet":{"type":"boolean","description":"Show Google reviews","default":true},"emailDelay":{"type":"string","description":"Delay before sending review request email after meeting","enum":["1h","2h","3h","4h","next-day","1d","2d","3d"],"default":"1d"},"showFloatingWidget":{"type":"boolean","description":"Display the floating review widget on the website","default":true},"collectionLevel":{"type":"string","description":"Level at which reviews are collected (company or workspace)","enum":["company","workspace"],"default":"company"},"googleReviewUrl":{"type":"string","description":"Google review URL where customers can leave a Google review (e.g. https://g.page/r/abc/review)"},"showGoogleCta":{"type":"boolean","description":"Show a Google review CTA after review submission","default":false},"googleCtaMode":{"type":"string","description":"Google CTA mode: \"all\" shows to everyone, \"gated\" shows only to positive reviewers","enum":["all","gated"],"default":"all"},"googleCtaThreshold":{"type":"number","description":"Minimum star rating to show Google CTA (only used when googleCtaMode is \"gated\")","default":4,"minimum":1,"maximum":5},"googlePlaceId":{"type":"string","description":"Google Place ID for importing Google reviews"},"reviewChannels":{"type":"array","description":"Channels to use for sending review invitations after meetings","default":["email"],"items":{"type":"string","enum":["email","sms","whatsapp"]}},"pageDesign":{"$ref":"#/components/schemas/ReviewPageDesign"},"shareSettings":{"$ref":"#/components/schemas/ReviewShareSettings"}},"required":["reviewCollection","autoApprove","showOnBooking","syncToProvenExpert","anonymousCollection","enableGoogleSnippet","emailDelay","showFloatingWidget","collectionLevel","showGoogleCta","googleCtaMode","googleCtaThreshold","reviewChannels"]},"Group":{"type":"object","properties":{"id":{"type":"string"},"companyId":{"type":"string","description":"Relation to company with FK, cascade delete, index"},"company":{"$ref":"#/components/schemas/Company"},"name":{"type":"string","description":"Group name/title"},"users":{"description":"Non-admin users relation. A soft limit should be enforced.","type":"array","items":{"$ref":"#/components/schemas/User"}},"admins":{"description":"Admins of the group. Admins should only be in this relation\nand not a user as well. A soft limit should be enforced.","type":"array","items":{"$ref":"#/components/schemas/User"}},"meta":{"$ref":"#/components/schemas/DateMeta"}},"required":["id","companyId","name","meta"]},"CreateAttendeeDto":{"type":"object","properties":{"email":{"type":"string","description":"Attendee email address. Required for all standard bookings.\nOptional only when `BookingDto.phoneOnlyBooking` is true.\nValidated as email format when provided.","format":"email"},"firstname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"lastname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"fullname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"receiveReminders":{"type":"boolean"},"bringalongEmails":{"description":"Additional attendee emails (max 5)","maxItems":5,"type":"array","items":{"type":"string","format":"email"}},"notes":{"type":"object","description":"An object containing attendee form entries.","additionalProperties":{"type":"string"}},"phone":{"type":"string"},"language":{"allOf":[{"$ref":"#/components/schemas/Language"}]},"timezone":{"type":"string"},"dataPolicyAccepted":{"type":"boolean"}},"required":["receiveReminders","notes"]},"PaymentProvider":{"type":"string","enum":["paypal","stripe","mollie","none"],"description":"Selected payment provider for this booking.\nRequired when the meeting type has multiple payment providers enabled.\nIf not provided, falls back to the first enabled provider."},"BookingDto":{"type":"object","properties":{"attendee":{"$ref":"#/components/schemas/CreateAttendeeDto"},"meetingTypeId":{"type":"string","description":"ID of the meeting type to book."},"hostIds":{"description":"Host IDs for the booking.\nRequired for one-on-one bookings (specific host selection).\nOptional for round-robin/queue bookings where queueId is provided instead.\nWhen sent TOGETHER with `queueId`, these IDs scope the round-robin to a\nsubset of the queue: the backend rotates only among these hosts (used by\n`?hosts=` subset links). Empty/omitted with `queueId` = the whole queue.","type":"array","items":{"type":"string"}},"start":{"type":"string"},"appointmentId":{"type":"string"},"location":{"type":"string"},"queueId":{"type":"string","description":"required when meeting type has a queue (round-robin / co-host)\nmust be undefined for non-queue meetings (one-to-one / group)\nif host selection is true, queue id is required if fastest host selection is chosen\nif hosts selection is true, queue id must be undefined if a specific host is chosen\nto round-robin within a SUBSET of the queue, send queueId together with the\nsubset `hostIds` (the backend rotates only among those hosts)"},"channel":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeChannel"}]},"duration":{"type":"number","description":"Duration in minutes for the booking. Optional.\nIf not provided, uses the meeting type's default duration.\nIf provided, must match either the default duration or one of the allowed durations configured for the meeting type.\nPrimarily needed when meeting type has multiple duration options (allowedDurations)."},"routingFormId":{"type":"string"},"ignoreAvailability":{"type":"boolean","description":"Skips availability, working-hours, conflict and group-capacity checks\n(instant booker). Only honored for authenticated host-initiated calls\nfrom the meeting type's own company; ignored on public/anonymous and\nAPI-key bookings, where it is normalized to false server-side."},"attendeePendingId":{"type":"number","description":"ID of pending attendee that will be deleted after successful booking.\nThis is only needed when \"collect during form entry\" feature is used.\nIf not provided, a successful booking may show up in pending contacts."},"paymentId":{"type":"string"},"paymentProvider":{"description":"Selected payment provider for this booking.\nRequired when the meeting type has multiple payment providers enabled.\nIf not provided, falls back to the first enabled provider.","allOf":[{"$ref":"#/components/schemas/PaymentProvider"}]},"couponCode":{"type":"string","description":"Coupon code for a discount on paid bookings.\nValidated during payment order creation and re-validated at booking time.","maxLength":32},"resourceChannelIds":{"description":"Ids of the resource channel entity","type":"array","items":{"type":"string"}},"oneTimeLinkId":{"type":"string","description":"Id of the one time booking link.\nRequired in order to invalidate the booking link, once booking is done"},"skipNotifications":{"type":"boolean","description":"Skip sending email notifications to the attendee for this booking"},"phoneOnlyBooking":{"type":"boolean","description":"When true, attendee email is not required and phone becomes the identifier.\nRequires the meeting type to have `allowPhoneOnlyBooking` enabled in its options.\nDesigned for voice agent / phone scheduling use cases where collecting email\nfrom the caller is not viable."},"icsTitle":{"type":"string","description":"Custom ICS calendar invite title. If provided, overrides the configured\nmeeting type ICS title for this specific booking.\nUseful for AI-generated titles based on conversation context (e.g., from calgent).","maxLength":200},"icsDescription":{"type":"string","description":"Custom ICS calendar invite description. If provided, overrides the configured\nmeeting type ICS description for this specific booking.\nUseful for AI-generated descriptions based on conversation context (e.g., from calgent).","maxLength":2000},"rwgToken":{"type":"string","description":"Google Actions Center token for conversion tracking.\nThis token is passed via the rwg_token URL parameter when users\nclick through from Google Maps/Search.","maxLength":500},"rwgMerchantId":{"type":"string","description":"Merchant ID associated with the rwg_token for Google Actions Center.\nUsed to determine if merchant changed during booking flow."},"bookingPassword":{"type":"string","description":"Password for accessing a password-protected booking page.\nRequired when the meeting type has password protection enabled."},"waitlistToken":{"type":"string","description":"Waitlist unsubscribe token. When provided (from the ?wl= URL param on the booking link),\nthe corresponding waitlist entry is removed after successful booking and the attendee\nis tagged as originating from the waitlist."}},"required":["attendee","meetingTypeId","start"]},"NextQueueHostsSelectionReasonDto":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"}},"groupId":{"type":"string"},"selectionReason":{"type":"object"}},"required":["userIds","selectionReason"]},"ProvisionalBookingPayload":{"type":"object","properties":{"id":{"type":"string","description":"Generated ID"},"dto":{"description":"Booking dto","allOf":[{"$ref":"#/components/schemas/BookingDto"}]},"type":{"enum":["doubleOptIn","requireHostConfirmation"],"type":"string"},"company":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Company"}]},"hosts":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"meetingType":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"Appointment":{"$ref":"#/components/schemas/Appointment"},"appointmentId":{"type":"string"},"queueBookingInfo":{"description":"queue booking info required for post booking side effects at the time of confirmation.","allOf":[{"$ref":"#/components/schemas/NextQueueHostsSelectionReasonDto"}]},"createdAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"status":{"description":"Status of the provisional booking request","enum":["pending","confirmed","expired","declined_by_host"],"type":"string"},"declineReason":{"type":"string","description":"Reason provided by host when declining (optional)"},"resolvedAt":{"format":"date-time","type":"string","description":"Timestamp when the booking was declined or expired"},"expiryWarningSent":{"type":"boolean","description":"Whether the \"expiring soon\" warning email has been sent to the host"},"expiresAt":{"format":"date-time","type":"string","description":"When this provisional booking expires.\nSet at creation time based on company's provisionalBookingExpiryHours or default 72h."},"start":{"format":"date-time","type":"string","description":"Reserved slot start. Used by availability checks so pending payloads\nblock the slot for other bookers until the payload is confirmed,\ndeclined, or expired."},"end":{"format":"date-time","type":"string","description":"Reserved slot end."}},"required":["id","dto","type","company","meetingType","createdAt","deletedAt","status","expiryWarningSent"]},"Reseller":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string","description":"Human-readable stable identifier used in the provisioning API and as\n`metadata.partner` string on legacy Companies. Lowercase, URL-safe.\nExample: 'placetel'."},"name":{"type":"string"},"provisioningSecretHash":{"type":"string","description":"Bcrypt hash of the provisioning secret. Compared in constant-time in\nResellerAuthGuard. Rotate by regenerating the hash and updating this\nfield; the reseller updates their secret on their end."},"dashboardPasswordHash":{"type":"string","nullable":true,"description":"Bcrypt hash of the dashboard login password. Separate from the\nprovisioning secret so the two can be rotated independently."},"billingModel":{"enum":["external","internal"],"type":"string"},"defaultTier":{"nullable":true,"description":"Tier granted to newly provisioned companies when billingModel=EXTERNAL.\nIgnored when billingModel=INTERNAL (company gets a trial like normal).","enum":["basic","essentials","growth","teams","enterprise"],"type":"string"},"autoVerifyEmail":{"type":"boolean","description":"Auto-confirm Cognito user + mark email verified on provisioning."},"issuePatOnProvision":{"type":"boolean","description":"Generate a PAT and return it in the provisioning response."},"commissionPercentage":{"type":"number","description":"Commission percentage retained by the reseller when billingModel=INTERNAL.\nUnused for EXTERNAL resellers (they keep 100% of end-user revenue)."},"defaultAllowPhoneOnlyBooking":{"type":"boolean"},"defaultChannel":{"nullable":true,"enum":["local","local-attendee","google","zoom","phone","phone-incoming","whatsapp","connect","webex","skypeForConsumer","skypeForBusiness","teamsForBusiness","teamsForBusiness2","teamsForExchange","teams2ForExchange","custom","resource","whereby","kmeet","zava","jitsi","nextcloudTalk","openTalk"],"type":"string"},"defaultAutoEnableSmsConfirmation":{"type":"boolean","description":"When true, the default meeting type seeds an SMS confirmation workflow\nout of the box. Requires the reseller to fund SMS credits\n(smsCreditsPerAccount > 0 + a live pool) for it to actually send."},"smsCreditsPerAccount":{"type":"number"},"active":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","slug","name","provisioningSecretHash","billingModel","autoVerifyEmail","issuePatOnProvision","commissionPercentage","defaultAllowPhoneOnlyBooking","defaultAutoEnableSmsConfirmation","smsCreditsPerAccount","active","createdAt","updatedAt"]},"PermissionSettings":{"type":"object","properties":{"meetingTypeCreate":{"type":"string"},"workflows":{"type":"string"},"forms":{"type":"string"},"inviteNewUsers":{"type":"string"},"handoffTarget":{"type":"string"},"filterAccess":{"type":"string"},"contactsVisibiltyPermission":{"type":"string"},"excludeAdminsFromTeamAnalytics":{"type":"boolean"},"slugChange":{"type":"string"}},"required":["meetingTypeCreate","workflows","forms","inviteNewUsers","handoffTarget","filterAccess","contactsVisibiltyPermission","excludeAdminsFromTeamAnalytics","slugChange"]},"CustomDomain":{"type":"object","properties":{"domain":{"type":"string"},"createdBy":{"$ref":"#/components/schemas/User"},"createdById":{"type":"string"},"status":{"enum":["pending","verified","active"],"type":"string"},"acmValidationCnameName":{"type":"string"},"acmValidationCnameValue":{"type":"string"},"acmValidationCnameTTL":{"type":"number"},"routingCnameName":{"type":"string"},"routingCnameValue":{"type":"string"},"routingCnameTTL":{"type":"number"},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"certificateArn":{"type":"string"},"cloudfrontDistroId":{"type":"string","nullable":true},"cdnEtag":{"type":"string","description":"ETag of the CloudFront distribution needed for deleting it."},"cdnEndpoint":{"type":"string","description":"URL of the CloudFront distribution"}},"required":["domain","createdBy","createdById","status","acmValidationCnameName","acmValidationCnameValue","acmValidationCnameTTL","routingCnameName","routingCnameValue","routingCnameTTL","company","companyId","createdAt","updatedAt","certificateArn","cloudfrontDistroId"]},"Company":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"slug":{"type":"string"},"description":{"type":"string","maxLength":500},"logo":{"type":"string"},"language":{"type":"string"},"allowedLanguages":{"type":"array","items":{"type":"string"}},"allowAITranslation":{"type":"boolean"},"timezone":{"type":"string","description":"Company timezone acts as default for new users and other presets.\nIt is set after onboarding is completed to the owner's timezone chosen during onboarding.\nIf not set, it defaults to UTC. If timezone is UTC it may suggest that onboarding was not completed."},"referralId":{"type":"string","deprecated":true},"tier":{"allOf":[{"$ref":"#/components/schemas/CompanyTier"}]},"subscriptionStatus":{"allOf":[{"$ref":"#/components/schemas/SubscriptionStatus"}]},"preferredCurrency":{"nullable":true,"description":"User's preferred currency for billing.\nIf null, detected currency from billing address country is used.","allOf":[{"$ref":"#/components/schemas/Currency"}]},"users":{"description":"Comma-seperated IDs of users.","deprecated":true,"type":"array","items":{"type":"string"}},"type":{"description":"Reflects solo/team choice during onboarding\nbut doesn't affect anything else","allOf":[{"$ref":"#/components/schemas/BrandType"}]},"emailSender":{"description":"Sender to use for sending emails. Defaults to null\nwhich uses the default sender. If a sender is configured\nthe configuration must still be fetched. If there is an\nerror with configuration, fall back to default and notify.","allOf":[{"$ref":"#/components/schemas/EmailSender"}]},"primaryColor":{"type":"string"},"useBrandStyling":{"type":"boolean"},"hideMeetergoBranding":{"type":"boolean"},"googleAnalyticsMeasurementId":{"type":"string","nullable":true,"description":"Google Analytics 4 Measurement ID (e.g., G-XXXXXXXXXX)"},"gtmContainerId":{"type":"string","nullable":true,"description":"Google Tag Manager Container ID (e.g., GTM-XXXXXXX)"},"googleActionsCenterEnabled":{"type":"boolean","description":"Enable Reserve with Google integration"},"googleActionsCenterMeetingTypeIds":{"nullable":true,"description":"Meeting type IDs for Reserve with Google","type":"array","items":{"type":"string"}},"connectWaitingRoom":{"nullable":true,"description":"Company-wide branding for the connect prejoin/waiting screen.\nWorkspaces can override via their own connectWaitingRoom settings.","allOf":[{"$ref":"#/components/schemas/ConnectWaitingRoomSettings"}]},"featureAccess":{"$ref":"#/components/schemas/FeatureAccess"},"detectedCurrency":{"description":"Currency detected from billing address country.\nUS and US territories use USD, all others use EUR.","allOf":[{"$ref":"#/components/schemas/Currency"}]},"effectiveCurrency":{"description":"Effective currency used for billing.\nUses preferred currency if set, otherwise detected currency.","allOf":[{"$ref":"#/components/schemas/Currency"}]},"useNoReplyAddress":{"type":"boolean"},"sendEmailsAsPlainText":{"type":"boolean","description":"When enabled, outgoing emails for this company are sent as plain text\ninstead of HTML. The HTML body is converted to text and replaces the\npayload; templates and React Email layouts are still rendered first\nand then stripped. Used by customers whose mail servers/recipients\nmangle rich HTML or who need accessibility/compliance-grade plain\nmessages."},"integrationPermissions":{"type":"object","description":"Granular per-integration permissions.\nControls which integrations are available to company members.\nWorkspace-level overrides can further refine these settings."},"outlookConnectionRequirementScopes":{"type":"array","description":"Where the \"host needs a working Microsoft connection\" requirement applies.\nEmpty array = no enforcement. See `OutlookConnectionRequirementScope` for\nthe meaning of each scope. Default empty for backwards compatibility.","items":{"$ref":"#/components/schemas/OutlookConnectionRequirementScope"}},"outlookConnectionRequirementTypes":{"type":"array","description":"Which Microsoft connection types are accepted as \"active\" when any scope\nin `outlookConnectionRequirementScopes` is enabled. A host needs at least\none matching active connection. Defaults to both Graph and Exchange Teams.","items":{"$ref":"#/components/schemas/OutlookConnectionType"}},"storageUsedBytes":{"type":"number","description":"Total storage used by this company in bytes.\nUpdated when files are uploaded or deleted."},"defaultLandingPage":{"type":"string","nullable":true,"description":"Company-level setting for the default page users see after login.\nWhen null, defaults to /meeting-types."},"miraSettings":{"nullable":true,"description":"Company-wide configuration for the Mira AI assistant: a master on/off\nswitch plus per-category data-access toggles. Null = never configured, in\nwhich case {@link getMiraSettings} resolves the master switch by signup\ndate: off (opt-in) for companies created before the rollout cutoff, on for\nnewer ones. Enforced in apps/next's chat route, not here.","allOf":[{"$ref":"#/components/schemas/MiraSettings"}]},"id":{"type":"string"},"usersRelation":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"owner":{"type":"string"},"emailDomain":{"type":"string","description":"Top level domain of email address\nOnly used for team type companies\nIf undefined, public email is used which can be considered as solo user initially"},"cancelsAt":{"format":"date-time","type":"string","description":"If subscription is canceled, date is set to cancelation date.\nNull if not canceled."},"stripeCustomerId":{"type":"string"},"stripeSubscriptionId":{"type":"string","nullable":true},"prorationBehaviorCreateProration":{"type":"boolean","description":"How proration is handled in stripe. Default is false,\nwhich corresponds to `always_invoice`, which bills subscription\nchanges immediately. If set to true, use `create_prorations`,\nwhich bills on the next invoice.\nCurrently this is only set manually for enterprise clients with\nSLA."},"samlIdp":{"type":"string","description":"Defined if company uses enterprise SSO. This is the identifier\npassed to cognito. A SAML IDP must be created in cognito.\nCurrently this is only set manually for enterprise clients."},"billingAddress":{"$ref":"#/components/schemas/CompanyBillingAddress"},"lifetimePremium":{"type":"boolean","deprecated":true},"trialEndDate":{"type":"string"},"showTrialOverModal":{"type":"boolean"},"maxUsers":{"type":"number"},"maxPartners":{"type":"number","description":"Maximum number of partner **users** allowed for this company.\n\nNOTE: \"Partner users\" here are a seat role inside a Company \u2014 they\ndon't count toward seat limits and can't access billing or host\nevents. This is NOT the `Reseller` concept (an external\norganisation that provisions meetergo accounts). See `resellerId`\nfor that relation."},"showDataPolicyLink":{"type":"boolean"},"hideDataPolicyCheckbox":{"type":"boolean"},"dataPolicyLink":{"type":"string","nullable":true},"imprintLink":{"type":"string","nullable":true},"hideEmptyWeekend":{"type":"boolean"},"useFormalBookingLanguage":{"type":"boolean"},"allowAttendeeDataDeletion":{"type":"boolean"},"metadata":{"$ref":"#/components/schemas/CompanyMetaData"},"customBookingCSS":{"type":"string"},"customConfirmationPageCSS":{"type":"string"},"isSoloFeaturesUnlocked":{"type":"boolean"},"metaPixelId":{"type":"string","nullable":true},"tiktokPixelId":{"type":"string","nullable":true},"appointmentDeleteTimer":{"type":"number","nullable":true,"description":"Time in minutes. Default 90 days"},"forms":{"type":"array","items":{"$ref":"#/components/schemas/Form"}},"deals":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"meetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"meetingTypeTemplates":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeTemplate"}},"appointments":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"emailTemplates":{"type":"array","items":{"$ref":"#/components/schemas/EmailTemplate"}},"workspaces":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"queues":{"type":"array","items":{"$ref":"#/components/schemas/Queue"}},"dataFields":{"type":"array","items":{"$ref":"#/components/schemas/DataField"}},"emailTemplateSelection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplateSelection"}]},"invites":{"type":"array","items":{"$ref":"#/components/schemas/CompanyInvite"}},"hubspotConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/HubspotConnection"}]},"pipedriveConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PipedriveConnection"}]},"closeConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CloseConnection"}]},"centralStationCrmConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CentralStationCrmConnection"}]},"ameiseConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/AmeiseConnection"}]},"salesforceConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SalesforceConnection"}]},"slackConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SlackConnection"}]},"intercomMessengerConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/IntercomMessengerConnection"}]},"hubSubscription":{"$ref":"#/components/schemas/HubSubscription"},"crmSubscription":{"$ref":"#/components/schemas/CrmSubscription"},"whatsappSubscription":{"description":"WhatsApp add-on subscription.\nLoaded eagerly so featureAccess.whatsappAddon is always computed correctly.","allOf":[{"$ref":"#/components/schemas/WhatsappSubscription"}]},"klickTippConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/KlicktippConnection"}]},"smartWeCRMConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SmartWeCRMConnection"}]},"stripeFeatureConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/StripeFeatureConnection"}]},"paypalFeatureConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PaypalFeatureConnection"}]},"mollieFeatureConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MollieFeatureConnection"}]},"aircallConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/AircallConnection"}]},"reviewSettings":{"$ref":"#/components/schemas/ReviewSettings"},"groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"}},"provisionalBookings":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionalBookingPayload"}},"commissionPercentage":{"type":"number","description":"Affiliate commission percentage for the company's referral/partner\nuser program. This is about *partner users* inside a Company and\nthe Cello affiliate program \u2014 NOT the `Reseller` entity's\ncommission (which lives on `Reseller.commissionPercentage`)."},"resellerId":{"type":"string","nullable":true,"description":"Reseller that provisioned this Company (e.g. Placetel). Nullable:\nCompanies registered through the regular signup flow have no\nreseller. Replaces the legacy `metadata.partner` string marker.\n\nSet during provisioning via the unified `signUpNewAdmin` flow. Used\nby the reseller dashboard to scope its queries to the reseller's\nown companies."},"reseller":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Reseller"}]},"emailFromName":{"type":"string","description":"Value to use as from email name.\nIf not defined, company name should be used."},"permissions":{"$ref":"#/components/schemas/PermissionSettings"},"doubleOptIn":{"type":"boolean","description":"Double opt in feature, default disabled."},"enableCustomLegalText":{"type":"boolean","description":"Enable/disable custom legal text"},"customLegalText":{"type":"string","description":"Custom legal text HTML, shown above booking button if enabled"},"requireInvite":{"type":"boolean","description":"If true, users need a valid invite to join the company.\nIf false, users will be prompted to join the company after registering\nwith the same email.\nDefaults to true (since 3.192.1)."},"flag":{"type":"number","description":"Used to flag suspicious accounts or ban. Smallint is\nused as to not expose any descriptive value.\nCurrently, only two values are used.\n`null` = Account is not flagged\n`1` = Banned. Account is banned from doing anything."},"registrationIp":{"type":"string","nullable":true},"finishedOnboarding":{"type":"boolean","description":"Determines whether company has completed onboarding"},"requireHostConfirmation":{"type":"boolean","description":"Require host confirmation feature, default disabled.\nWhen enabled, hosts need to confirm before the appointment is created."},"provisionalBookingExpiryHours":{"type":"number","description":"Expiry time for provisional bookings in hours.\nIf null, uses the default of 72 hours."},"enableNextBooking":{"type":"boolean","deprecated":true},"enableCookieBanner":{"type":"boolean"},"useDedicatedIP":{"type":"boolean","description":"Enable dedicated IP support for Exchange connections.\nWhen true, Exchange traffic will be routed through a proxy\nto ensure all requests come from a single determined IP.\n@todo store the actual proxy credentials to be able to support\ndifferent proxies per client."},"useCustomSmtpDedicatedIP":{"type":"boolean","description":"Enable dedicated IP support for Custom SMTP connections.\nWhen true, Custom SMTP traffic will be routed through a proxy\nto ensure all emails originate from the configured dedicated IP.\nThis applies to all SMTP configurations for this company.\nProxy is used during both verification and email sending."},"sallyEnabled":{"type":"boolean","description":"When enabled, invite@sally.io is automatically added to online meetings\nas an attendee for AI meeting transcription."},"defaultDomainEntity":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CustomDomain"}]},"defaultDomain":{"type":"string"},"jitsiCustomDomain":{"type":"string","nullable":true,"description":"Custom domain for Jitsi Meet video conferencing (e.g., 'meet.example.com')\nWhen set, Jitsi rooms will use this domain instead of the default meet.jit.si\nFormat: https://{customDomain}/{roomId}"},"lowStorageNotifiedAt":{"format":"date-time","type":"string","nullable":true,"description":"When low storage notification was last sent (null = not sent).\nUsed to prevent duplicate notifications."}},"required":["name","slug","description","language","timezone","tier","subscriptionStatus","users","type","primaryColor","useBrandStyling","hideMeetergoBranding","googleActionsCenterEnabled","featureAccess","detectedCurrency","effectiveCurrency","useNoReplyAddress","sendEmailsAsPlainText","outlookConnectionRequirementScopes","outlookConnectionRequirementTypes","storageUsedBytes","id","createdAt","updatedAt","owner","prorationBehaviorCreateProration","billingAddress","lifetimePremium","showTrialOverModal","maxUsers","maxPartners","showDataPolicyLink","hideDataPolicyCheckbox","dataPolicyLink","imprintLink","hideEmptyWeekend","useFormalBookingLanguage","allowAttendeeDataDeletion","customBookingCSS","customConfirmationPageCSS","isSoloFeaturesUnlocked","appointmentDeleteTimer","commissionPercentage","permissions","doubleOptIn","enableCustomLegalText","requireInvite","finishedOnboarding","requireHostConfirmation","enableNextBooking","enableCookieBanner","useDedicatedIP","useCustomSmtpDedicatedIP","sallyEnabled"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"order":{"type":"number"},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"winProbability":{"type":"number"},"rottingDays":{"type":"number"},"requiredCustomFields":{"type":"array","items":{"type":"string"}},"pipeline":{"$ref":"#/components/schemas/Pipeline"},"pipelineId":{"type":"string"}},"required":["id","name","color","order","isWon","isLost","winProbability","pipeline","pipelineId"]},"Pipeline":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isDefault":{"type":"boolean"},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"}},"required":["id","name","isDefault","company","companyId","createdAt","updatedAt"]},"Reminder":{"type":"object","properties":{"meetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"meetingTypeTemplates":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeTemplate"}},"forms":{"type":"array","items":{"$ref":"#/components/schemas/Form"}},"pipelines":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}},"workspace":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Workspace"}]},"scheduledReminders":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledReminder"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"number"},"name":{"type":"string"},"enabled":{"type":"boolean"},"scope":{"type":"object"},"triggers":{"type":"array","items":{"$ref":"#/components/schemas/ReminderTrigger"}},"companyId":{"type":"string"},"workspaceId":{"type":"string"},"userId":{"type":"string","description":"Maybe shouldnt be nullable"}},"required":["createdAt","updatedAt","id","name","enabled","scope","triggers","companyId"]},"HostBookingFrequency":{"type":"object","properties":{"perDay":{"type":"number","description":"Maximum bookings allowed per day"},"perWeek":{"type":"number","description":"Maximum bookings allowed per week"},"perMonth":{"type":"number","description":"Maximum bookings allowed per month"},"perYear":{"type":"number","description":"Maximum bookings allowed per year"}}},"IcsInfo":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalisedContent"},"description":{"$ref":"#/components/schemas/LocalisedContent"},"location":{"$ref":"#/components/schemas/LocalisedContent"}},"required":["title","description","location"]},"DaysIntoFutureSetting":{"type":"object","properties":{"mode":{"type":"string"},"bookingLimit":{"type":"number"},"countMode":{"type":"string"},"rangeMin":{"format":"date-time","type":"string"},"rangeMax":{"format":"date-time","type":"string"}},"required":["mode"]},"MeetingTypeCommunicationTemplateStatus":{"type":"string","enum":["useCompanyTemplate","useMeetingTypeTemplate","disabled"],"description":"@todo migrate to boolean, only disabled does something"},"MeetingTypeNotificationConfig":{"type":"object","properties":{"enable":{"type":"boolean"},"timing":{"type":"number"},"content":{"$ref":"#/components/schemas/EmailTemplateContent"},"attachmentConfig":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["library","form_field"]},"fileAssetId":{"type":"string","nullable":true},"dataFieldName":{"type":"string","nullable":true}}}}},"required":["enable","timing","content"]},"CommunicationSettings":{"type":"object","properties":{"attendeeMeetingConfirmationStatus":{"description":"@todo migrate to boolean, only disabled does something","allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingConfirmation":{"nullable":true,"deprecated":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"hostMeetingConfirmationStatus":{"deprecated":true,"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"hostMeetingConfirmation":{"nullable":true,"deprecated":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"attendeeMeetingCancelledStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingCancelled":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"hostMeetingCancelledStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"hostMeetingCancelled":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"attendeeMeetingRescheduledStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingRescheduled":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"hostMeetingRescheduledStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"hostMeetingRescheduled":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"bringalongMeetingConfirmationStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"bringalongMeetingConfirmation":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"hostMeetingReassignedStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"hostMeetingReassigned":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"attendeeMeetingHostChangedStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingHostChanged":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"attendeeMeetingCancelRequestStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingCancelRequest":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"attendeeMeetingRescheduleRequestStatus":{"allOf":[{"$ref":"#/components/schemas/MeetingTypeCommunicationTemplateStatus"}]},"attendeeMeetingRescheduleRequest":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/EmailTemplate"}]},"confirmationAttachmentConfig":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["library","form_field"]},"fileAssetId":{"type":"string","nullable":true},"dataFieldName":{"type":"string","nullable":true}}}},"reminderRecipient":{"enum":["guest-all","host-all","everyone","company-user","custom-email","form-recipient","form-sender","deal-owner","deal-primary-contact","deal-contacts","lead-contact"],"type":"string"},"followupRecipient":{"enum":["guest-all","host-all","everyone","company-user","custom-email","form-recipient","form-sender","deal-owner","deal-primary-contact","deal-contacts","lead-contact"],"type":"string"},"id":{"type":"number"},"meetingType":{"$ref":"#/components/schemas/MeetingType"},"meetingTypeTemplate":{"$ref":"#/components/schemas/MeetingTypeTemplate"},"confirmation":{"type":"array","items":{"$ref":"#/components/schemas/EmailTemplateContent"}},"reminder":{"$ref":"#/components/schemas/MeetingTypeNotificationConfig"},"followup":{"$ref":"#/components/schemas/MeetingTypeNotificationConfig"},"sms":{"$ref":"#/components/schemas/MeetingTypeNotificationConfig"}},"required":["attendeeMeetingConfirmationStatus","attendeeMeetingConfirmation","hostMeetingConfirmationStatus","hostMeetingConfirmation","attendeeMeetingCancelledStatus","attendeeMeetingCancelled","hostMeetingCancelledStatus","hostMeetingCancelled","attendeeMeetingRescheduledStatus","attendeeMeetingRescheduled","hostMeetingRescheduledStatus","hostMeetingRescheduled","bringalongMeetingConfirmationStatus","bringalongMeetingConfirmation","hostMeetingReassignedStatus","hostMeetingReassigned","attendeeMeetingHostChangedStatus","attendeeMeetingHostChanged","attendeeMeetingCancelRequestStatus","attendeeMeetingCancelRequest","attendeeMeetingRescheduleRequestStatus","attendeeMeetingRescheduleRequest","reminderRecipient","followupRecipient","id","confirmation","reminder","followup","sms"]},"LanguageSetting":{"type":"object","properties":{"enable":{"type":"boolean"},"default":{"type":"string"},"allowed":{"type":"array","items":{"type":"string"}}},"required":["enable","default","allowed"]},"CustomTextSelectChannelSetting":{"type":"object","properties":{"enable":{"type":"boolean"},"body":{"type":"string"}},"required":["enable","body"]},"TimezonePresetSetting":{"type":"object","properties":{"enable":{"type":"boolean"},"timezonePreset":{"type":"string"}},"required":["enable"]},"MeetingPaymentInfo":{"type":"object","properties":{"enable":{"type":"boolean"},"price":{"type":"number"},"currency":{"type":"string"},"paymentTerms":{"type":"string"},"suffix":{"type":"string"},"provider":{"allOf":[{"$ref":"#/components/schemas/PaymentProvider"}]},"providers":{"type":"array","description":"Enabled payment providers. When set, takes precedence over provider.","items":{"type":"string","enum":["paypal","stripe","mollie","none"]}},"durationPrices":{"type":"object","description":"Price per duration in minutes","example":{"30":50,"60":90,"90":120}}},"required":["enable"]},"VideoSetting":{"type":"object","properties":{"enable":{"type":"boolean"},"immersive":{"type":"boolean"},"src":{"type":"string"},"thumbnailUrl":{"type":"string"}},"required":["enable","immersive"]},"CancellationPolicySetting":{"type":"object","properties":{"enable":{"type":"boolean"},"mode":{"type":"string","enum":["disabled","hours","days"]},"duration":{"type":"number"}},"required":["enable"]},"ReschedulingPolicySetting":{"type":"object","properties":{"enable":{"type":"boolean"},"mode":{"type":"string","enum":["disabled","hours","days"]},"duration":{"type":"number"}},"required":["enable"]},"RecurringSetting":{"type":"object","properties":{"enable":{"type":"boolean"},"mode":{"type":"string","enum":["recurring","multi_slot"]},"frequency":{"type":"string","enum":["weekly","biweekly","monthly"]},"maxOccurrences":{"type":"number"},"minOccurrences":{"type":"number"},"maxSlots":{"type":"number"},"minSlots":{"type":"number"}},"required":["enable"]},"MeetingTypeTemplate":{"type":"object","properties":{"meetingInfo":{"description":"Common information for Meeting types and appointments","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"meetingOptions":{"description":"Options for Meeting Type","allOf":[{"$ref":"#/components/schemas/MeetingOptions"}]},"timeslotInterval":{"type":"number"},"spots":{"type":"number"},"bookingMinimum":{"type":"number","description":"Time in minutes. Default 30 mins"},"schedule":{"deprecated":true,"allOf":[{"$ref":"#/components/schemas/WeeklySchedule"}]},"hideAddressField":{"type":"boolean","description":"Hide address field for LOCAL_ATTENDEE channel type"},"form":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Form"}]},"availability":{"$ref":"#/components/schemas/Availability"},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"locations":{"type":"array","items":{"type":"string"}},"bookingFrequencies":{"description":"@todo this doesn't need to be OneToMany and maybe not even a relation (unless different frequencies per user for a queue are needed)","type":"array","items":{"$ref":"#/components/schemas/HostBookingFrequency"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"useHostAvailability":{"type":"boolean"},"meetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"id":{"type":"string"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"ics":{"$ref":"#/components/schemas/IcsInfo"},"daysIntoFuture":{"$ref":"#/components/schemas/DaysIntoFutureSetting"},"enableCalendarInviteNotification":{"type":"boolean","description":"New notification setting - use calendar invites instead\nof email notifications. When this option is enabled,\nbooking confirmation notification and cancellation notification\nare handled by calendar connection.\nA google/outlook connection is required. It will be used\nto create calendar invite with notification.\nAll meeting types pre-migration use email notifications.\nIntroduced in order to mitigate duplicate invites, cancellation\nhandling in calendar and overall improve both host and attendee\nexperience."},"useSchedule":{"type":"boolean","description":"Override individual host's availability\nIf true, availability selected for that meeting type will be used\nas common availability for all hosts.\nMove to meetingOptions?"},"useCompanyLogo":{"type":"boolean","description":"Move to meetingOptions?"},"useTeamLogo":{"type":"boolean","description":"Show team logo instead of company logo (for queue/round-robin meeting types)"},"useCustomInvite":{"type":"boolean","description":"Move to meetingOptions?"},"disableActionButtons":{"type":"boolean","description":"Move to meetingOptions?"},"showConfetti":{"type":"boolean","description":"Whether to show confetti animation on the confirmation page"},"enableWithdrawalButton":{"type":"boolean","description":"Show the EU/German withdrawal button on the booking confirmation page (\u00a7 356a BGB, from 19.06.2026)"},"useCustomForm":{"type":"boolean"},"formId":{"type":"string"},"inCompanyPage":{"type":"boolean","deprecated":true},"formFirst":{"type":"boolean","description":"Move to meetingOptions?"},"communicationSettings":{"$ref":"#/components/schemas/CommunicationSettings"},"communicationSettingsId":{"type":"number","nullable":true},"availabilityId":{"type":"string"},"companyId":{"type":"string","description":"Not null"},"reminderIds":{"type":"array","items":{"type":"string"}},"createdBy":{"description":"User who originally created the meeting type.\nUsers can create meeting type for others.","allOf":[{"$ref":"#/components/schemas/User"}]},"createdById":{"type":"string"},"compact":{"type":"boolean"},"disableTeamsEmail":{"type":"boolean","description":"If enabled, booking confirmation email won't be sent for Microsoft Teams meeting"},"enableWaitlist":{"type":"boolean"},"languageSetting":{"description":"Languages to be used for booking page and notifications.\nDefaults to '[]', to default to our current default behavious\n(all languages active).","allOf":[{"$ref":"#/components/schemas/LanguageSetting"}]},"customTextSelectChannel":{"description":"If null, default channel selection text is shown.\nAllows customizing the text \"Where do you want the meeting to take place?\"","allOf":[{"$ref":"#/components/schemas/CustomTextSelectChannelSetting"}]},"timezonePreset":{"$ref":"#/components/schemas/TimezonePresetSetting"},"cssSetting":{"$ref":"#/components/schemas/CssSetting"},"meetingPaymentInfo":{"$ref":"#/components/schemas/MeetingPaymentInfo"},"videoSetting":{"$ref":"#/components/schemas/VideoSetting"},"cancellationPolicy":{"$ref":"#/components/schemas/CancellationPolicySetting"},"reschedulingPolicy":{"$ref":"#/components/schemas/ReschedulingPolicySetting"},"recurringSetting":{"$ref":"#/components/schemas/RecurringSetting"},"templateType":{"enum":["individual","team"],"type":"string"},"queueType":{"nullable":true,"enum":["simpleRoundRobin","advancedRoundRobin","equalDistribution"],"type":"string"},"assignedToCount":{"type":"number","description":"number of meetings assigned to this template"},"lockedFields":{"description":"Field keys locked by the admin. Users cannot modify the\ncorresponding settings on meeting types created from this template.\nCopied to meeting types on assign and push.","type":"array","items":{"type":"string"}},"slug":{"type":"string","nullable":true,"description":"Optional canonical URL slug. When set, this is the source of truth for\nthe URL of meeting types created from (or synced from) this template:\n  - Used as the base slug on `assignHost` / `assignWorkspace`.\n  - Propagated to assigned meeting types on push.\nWhen NULL, slugs behave exactly as before: derived from the template\nname on assign, never touched on push. Per-user uniqueness still\napplies via `getAvailableMeetingTypeSlug`."},"resourceChannels":{"type":"array","items":{"$ref":"#/components/schemas/ResourceChannel"}}},"required":["meetingInfo","meetingOptions","timeslotInterval","spots","bookingMinimum","schedule","hideAddressField","locations","createdAt","updatedAt","useHostAvailability","id","crmOptions","ics","daysIntoFuture","enableCalendarInviteNotification","useSchedule","useCompanyLogo","useTeamLogo","useCustomInvite","disableActionButtons","showConfetti","enableWithdrawalButton","useCustomForm","inCompanyPage","formFirst","communicationSettingsId","companyId","reminderIds","createdById","compact","disableTeamsEmail","enableWaitlist","languageSetting","customTextSelectChannel","timezonePreset","cssSetting","meetingPaymentInfo","videoSetting","cancellationPolicy","reschedulingPolicy","recurringSetting","templateType","lockedFields"]},"FormThemeDecoration":{"type":"object","properties":{"kind":{"type":"string","enum":["none","bubbles","dots","grid","waves","mesh"]},"colors":{"type":"array","items":{"type":"string"}},"opacity":{"type":"number"}}},"FormThemeBackground":{"type":"object","properties":{"kind":{"type":"string","enum":["color","gradient","image"]},"value":{"type":"string"},"brightness":{"type":"number"},"decoration":{"$ref":"#/components/schemas/FormThemeDecoration"}}},"FormThemeFont":{"type":"object","properties":{"family":{"type":"string"},"size":{"type":"string","enum":["sm","md","lg"]}}},"FormThemeProgressBar":{"type":"object","properties":{"enabled":{"type":"boolean"},"steps":{"type":"array","items":{"type":"string"}},"primaryColor":{"type":"string"},"pageSteps":{"type":"object","additionalProperties":{"type":"number"}}}},"FormThemeFooterLink":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}}},"FormThemeFooter":{"type":"object","properties":{"text":{"type":"string"},"subtext":{"type":"string"},"links":{"type":"array","items":{"$ref":"#/components/schemas/FormThemeFooterLink"}}}},"FormThemeLabel":{"type":"object","properties":{"size":{"type":"string","enum":["sm","md","lg"]},"align":{"type":"string","enum":["left","center"]},"color":{"type":"string"}}},"FormTheme":{"type":"object","properties":{"preset":{"type":"string","enum":["light","dark","eco","charcoal","bold","custom"]},"accent":{"type":"string"},"textColor":{"type":"string"},"surfaceColor":{"type":"string"},"inputColor":{"type":"string"},"borderColor":{"type":"string"},"background":{"$ref":"#/components/schemas/FormThemeBackground"},"font":{"$ref":"#/components/schemas/FormThemeFont"},"progressBar":{"$ref":"#/components/schemas/FormThemeProgressBar"},"footer":{"$ref":"#/components/schemas/FormThemeFooter"},"buttonRadius":{"type":"number"},"inputRadius":{"type":"number"},"buttonStyle":{"type":"string","enum":["solid","outline","soft"]},"label":{"$ref":"#/components/schemas/FormThemeLabel"},"formWidth":{"type":"string","enum":["narrow","normal","wide"]},"formLayout":{"type":"string","enum":["card","classic"]},"logoUrl":{"type":"string"},"multiColumn":{"type":"boolean"},"customCss":{"type":"string"},"themeId":{"type":"string"}}},"FormStructureType":{"type":"string","enum":["FORM_ONLY","FUNNEL_WITH_FORM","FUNNEL_ONLY"],"description":"slug used in routing form only."},"MarketplaceStatus":{"type":"string","enum":["none","pending","approved","rejected"],"description":"Marketplace lifecycle. Only `approved` forms appear in the public read\nAPI and the in-app gallery. See {@link MarketplaceStatus}."},"Form":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"object","additionalProperties":{"type":"string"},"description":"Title to be displayed in booking in multiple languages. Key is Language Code, Value is title in specified locale."},"actionButtonText":{"type":"object","additionalProperties":{"type":"string"},"description":"Button text to be displayed in booking in multiple languages. Key is Language Code, Value is title in specified locale."},"blockedEmails":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/FormField"}},"funnelSteps":{"type":"array","items":{"$ref":"#/components/schemas/FunnelStep"}},"default":{"type":"boolean","description":"Indicates default form that can be modified, but should not be deleted"},"funnelConditions":{"type":"array","items":{"$ref":"#/components/schemas/FunnelQualifier"}},"useFullName":{"type":"boolean"},"skipForm":{"type":"boolean"},"showProgressBar":{"type":"boolean"},"useMeetingTypeSelection":{"type":"boolean"},"selectMeetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"selectMeetingTypeOrder":{"description":"Stores the order of meeting types for selection pages.\nIf empty/null, use default order from selectMeetingTypeIds.","type":"array","items":{"type":"string"}},"selectionPageLayout":{"default":"grid","allOf":[{"$ref":"#/components/schemas/SelectionPageLayout"}]},"meetingType":{"$ref":"#/components/schemas/MeetingType"},"meetingTypeTemplate":{"$ref":"#/components/schemas/MeetingTypeTemplate"},"qualifiers":{"type":"array","items":{"$ref":"#/components/schemas/Qualifier"}},"workspace":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Workspace"}]},"formTheme":{"nullable":true,"description":"Form-scoped theme (Fillout-style). Decoupled from CssSetting so a form\ncan carry its own visual identity without touching shared meeting-type\nstyling. Nullable: falls back to company branding when absent.","allOf":[{"$ref":"#/components/schemas/FormTheme"}]},"structureType":{"description":"slug used in routing form only.","allOf":[{"$ref":"#/components/schemas/FormStructureType"}]},"sendRoutingFormSubmissionNotification":{"type":"boolean"},"notificationUserId":{"type":"string","nullable":true},"notificationEmail":{"type":"string","nullable":true},"redirectAfterSubmission":{"type":"boolean"},"redirectUrl":{"type":"string","nullable":true},"allowSaveAndReturn":{"type":"boolean"},"showCompanyLogo":{"type":"boolean"},"webhookUrl":{"type":"string","nullable":true},"cssWorkspaceId":{"type":"string","nullable":true,"description":"Which workspace's CSS to use when cssSetting.mode is Company.\nIf null, falls back to the form's own workspace, then company CSS."},"hasPassword":{"type":"boolean","readOnly":true},"submissionDeadline":{"format":"date-time","type":"string","nullable":true},"maxSubmissions":{"type":"number","nullable":true},"defaultRecipientExpiryDays":{"type":"number","nullable":true},"publishedAt":{"format":"date-time","type":"string","nullable":true},"requiresPublish":{"type":"boolean","description":"New v2-created forms set this true: the form is not publicly visible\nuntil its first publish. Existing forms stay false (grandfathered: the\nlive entities keep serving until the owner first publishes)."},"allowCopy":{"type":"boolean","description":"Opt-in gate for copying this form's structure. Default false: a public\nlink does NOT make a form copyable. Owner must turn this on (or publish\nto the marketplace, which implies consent). Enforced in the import path\nand the marketplace \"use template\" path. Stops the one-click clone; it\ncannot stop someone manually recreating fields off the public page."},"marketplaceStatus":{"description":"Marketplace lifecycle. Only `approved` forms appear in the public read\nAPI and the in-app gallery. See {@link MarketplaceStatus}.","allOf":[{"$ref":"#/components/schemas/MarketplaceStatus"}]},"marketplaceOfficial":{"type":"boolean","description":"\"by meetergo\" curated form. Operator-set. Controls badge + sort order."},"marketplaceCategory":{"type":"string","nullable":true,"description":"Category slug for marketplace filtering (e.g. \"lead-gen\", \"recruiting\")."},"marketplaceDescription":{"type":"string","nullable":true,"description":"Public listing description used for the gallery card and SEO copy."},"marketplaceListedAt":{"format":"date-time","type":"string","nullable":true,"description":"When the form was first approved/listed in the marketplace."},"marketplaceUseCount":{"type":"number","description":"How many times this form has been copied from the marketplace."},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"blockEmails":{"type":"boolean"},"fieldIds":{"type":"array","items":{"type":"string"}},"funnelStepIds":{"type":"array","items":{"type":"string"}},"disableModalInEmbed":{"type":"boolean"},"selectMeetingTypeIds":{"type":"array","items":{"type":"string"}},"meetingTypeId":{"type":"string"},"meetingTypeTemplateId":{"type":"string"},"companyId":{"type":"string","description":"Shouldn't be nullable?"},"qualifierIds":{"type":"array","items":{"type":"string"}},"workspaceId":{"type":"string","nullable":true},"userId":{"type":"string"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"cssSetting":{"description":"Only has an effect for a funnel with slides","allOf":[{"$ref":"#/components/schemas/CssSetting"}]},"slug":{"type":"string"}},"required":["id","name","title","actionButtonText","blockedEmails","fields","funnelSteps","default","funnelConditions","useFullName","skipForm","useMeetingTypeSelection","selectMeetingTypes","selectionPageLayout","structureType","sendRoutingFormSubmissionNotification","redirectAfterSubmission","allowSaveAndReturn","showCompanyLogo","hasPassword","requiresPublish","allowCopy","marketplaceStatus","marketplaceOfficial","marketplaceUseCount","createdAt","updatedAt","blockEmails","fieldIds","funnelStepIds","disableModalInEmbed","selectMeetingTypeIds","companyId","qualifierIds","crmOptions","cssSetting"]},"BookingFrequency":{"type":"object","properties":{"frequency":{"$ref":"#/components/schemas/HostBookingFrequency"},"userId":{"type":"string","deprecated":true},"meetingTypeId":{"type":"string"}},"required":["frequency","userId","meetingTypeId"]},"MetaSetting":{"type":"object","properties":{"nextBetaEnabled":{"type":"boolean"},"title":{"type":"string"},"body":{"type":"string"},"image":{"type":"string"}}},"MeetingType":{"type":"object","properties":{"meetingInfo":{"description":"Common information for Meeting types and appointments. SQL columns are prefixed: `meetingInfo.name` \u2192 `\"meetingInfoName\"`, `meetingInfo.duration` \u2192 `\"meetingInfoDuration\"`. Same for all `@Column(() => X)` embeds below.","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"meetingOptions":{"description":"Options for Meeting Type","allOf":[{"$ref":"#/components/schemas/MeetingOptions"}]},"timeslotInterval":{"type":"number"},"spots":{"type":"number"},"enabled":{"type":"boolean"},"isHidden":{"type":"boolean","description":"Marks meeting types that should be hidden from user-facing UIs.\nUsed for system-generated meeting types (e.g., calgent auto-bookings).\nWhen true:\n- Not shown in meeting type lists (filtered in all queries)\n- Cannot be directly edited by users via UI\n- May be managed by automated processes"},"slug":{"type":"string"},"bookingMinimum":{"type":"number","description":"Time in minutes. Default 30 mins"},"roundRobin":{"description":"Used to store user latest booked host ids\nLast element - lastest booked host\nThere shouldn't be duplicates","type":"array","items":{"type":"string"}},"schedule":{"deprecated":true,"allOf":[{"$ref":"#/components/schemas/WeeklySchedule"}]},"hideAddressField":{"type":"boolean","description":"Hide address field for LOCAL_ATTENDEE channel type"},"form":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Form"}]},"emailQualityGuard":{"type":"boolean","description":"Email Quality Guard - Blocks disposable emails and verifies email addresses exist\nOnly applies when formFirst is enabled (Lead Capture Mode)"},"enableWaitlist":{"type":"boolean"},"availability":{"$ref":"#/components/schemas/Availability"},"tags":{"nullable":true,"description":"User-defined tags for organizing meeting types in the dashboard.\nFree-form strings, OR semantics for filtering. Mirrors the contact tags pattern.","type":"array","items":{"type":"string"}},"appointments":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"qualifiers":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Qualifier"}},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"formMeetingTypes":{"type":"array","items":{"$ref":"#/components/schemas/Form"}},"locations":{"type":"array","items":{"type":"string"}},"bookingFrequencies":{"description":"@todo this doesn't need to be OneToMany and maybe not even a relation (unless different frequencies per user for a queue are needed)","type":"array","items":{"$ref":"#/components/schemas/BookingFrequency"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"type":"string","nullable":true},"provisionalBookings":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionalBookingPayload"}},"accountOwnerMatchingEnabled":{"type":"boolean","description":"Account-owner matching: route a round-robin booking to the user\nwho already owns the booker's account. Owner is resolved via\npast meetergo bookings + connected CRMs (Pipedrive, HubSpot,\nSalesforce). Requires `featureAccess.roundRobin` (Teams plan)."},"accountOwnerMatchingScope":{"type":"object","description":"Where to draw the eligible-owner pool from. Picks one scope\nper meeting type (no inheritance).\n- `meetingType`: uses `accountOwnerMatchingUserIds` below\n- `workspace`: every active member of the meeting type's workspace\n- `company`: every active member of the meeting type's company"},"accountOwnerMatchingUserIds":{"description":"Eligible owners when scope is `meetingType`. Ignored otherwise.","type":"array","items":{"type":"string"}},"accountOwnerMatchingAllowNonQueueHosts":{"type":"boolean","description":"If false (default), matched owners must also be queue members\nfor the round-robin to route to them. If true, a matched pool\nuser can host even when not in the queue."},"accountOwnerMatchingFallback":{"type":"object","description":"Behaviour when no owner matches (or matched owner has no slots).\n- `normalRoundRobin`: fall back to standard host availability\n- `showEmpty`: show no slots"},"internalNotes":{"type":"string","nullable":true,"description":"Internal note for organizers. Never shown to customers.\nUsed for project keys, partner info, briefing notes, etc."},"replyTo":{"type":"string","nullable":true,"description":"Override the Reply-To address for notification emails sent for\nthis meeting type. When set, takes precedence over the company\n`useNoReplyAddress` flag and the default host email fallback.\nUseful for sales/support teams that want replies routed to a\nshared inbox instead of the individual host."},"enableWithdrawalButton":{"type":"boolean","description":"Show the EU/German withdrawal button (\"Widerrufsbutton\") on the\nbooking confirmation page. Required from 19 June 2026 (\u00a7 356a BGB)\nfor B2C distance contracts with a right of withdrawal.\n\nOff by default. Hosts must opt in per meeting type. Disable for\nleisure-services tied to a fixed date (concerts, events) which are\nexempt under \u00a7 312g Abs. 2 Nr. 9 BGB."},"id":{"type":"string"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"ics":{"$ref":"#/components/schemas/IcsInfo"},"daysIntoFuture":{"$ref":"#/components/schemas/DaysIntoFutureSetting"},"enableCalendarInviteNotification":{"type":"boolean","description":"New notification setting - use calendar invites instead\nof email notifications. When this option is enabled,\nbooking confirmation notification and cancellation notification\nare handled by calendar connection.\nA google/outlook connection is required. It will be used\nto create calendar invite with notification.\nAll meeting types pre-migration use email notifications.\nIntroduced in order to mitigate duplicate invites, cancellation\nhandling in calendar and overall improve both host and attendee\nexperience."},"useSchedule":{"type":"boolean","description":"Override individual host's availability\nIf true, availability selected for that meeting type will be used\nas common availability for all hosts.\nMove to meetingOptions?"},"useCompanyLogo":{"type":"boolean","description":"Move to meetingOptions?"},"useTeamLogo":{"type":"boolean","description":"Show team logo instead of company logo (for queue/round-robin meeting types)"},"useCustomInvite":{"type":"boolean","description":"Move to meetingOptions?"},"disableActionButtons":{"type":"boolean","description":"Move to meetingOptions?"},"showConfetti":{"type":"boolean","description":"Whether to show confetti animation on the confirmation page"},"useCustomForm":{"type":"boolean"},"formId":{"type":"string"},"inCompanyPage":{"type":"boolean","deprecated":true},"formFirst":{"type":"boolean","description":"Move to meetingOptions?"},"communicationSettings":{"$ref":"#/components/schemas/CommunicationSettings"},"communicationSettingsId":{"type":"number","nullable":true},"availabilityId":{"type":"string"},"companyId":{"type":"string","description":"Not null"},"isFavorite":{"type":"boolean","description":"Computed at query time per user \u2014 not persisted on the entity.\nPopulated by the list endpoint via a join with meeting_type_favorite."},"queue":{"$ref":"#/components/schemas/Queue"},"queueId":{"type":"string","description":"Not real value as queue is owner"},"oldQueues":{"type":"array","items":{"$ref":"#/components/schemas/Queue"}},"reminderIds":{"type":"array","items":{"type":"string"}},"workspace":{"nullable":true,"description":"Workspace the meeting type is part of. If undefined,\nmeeting type is not part of any workspace.","allOf":[{"$ref":"#/components/schemas/Workspace"}]},"workspaceId":{"type":"string"},"isGlobalQueue":{"type":"boolean","description":"If true, meeting type is round robin/collective, which\nmeans it has a queue. However, it doesn't belong to a\nworkspace, so it is available to the whole company.\nMay not be needed but using explicit value for clarity for now."},"user":{"nullable":true,"description":"Main host of meeting type. For meeting types in workspace, queue\nis used and this is undefined or does nothing (?).\nMaybe rename to \"singleHost\"?","allOf":[{"$ref":"#/components/schemas/User"}]},"userId":{"type":"string","nullable":true},"createdBy":{"description":"User who originally created the meeting type.\nUsers can create meeting type for others.","allOf":[{"$ref":"#/components/schemas/User"}]},"createdById":{"type":"string"},"compact":{"type":"boolean"},"disableTeamsEmail":{"type":"boolean","description":"If enabled, booking confirmation email won't be sent for Microsoft Teams meeting"},"languageSetting":{"description":"Languages to be used for booking page and notifications.\nDefaults to '[]', to default to our current default behavious\n(all languages active).","allOf":[{"$ref":"#/components/schemas/LanguageSetting"}]},"customTextSelectChannel":{"description":"If null, default channel selection text is shown.\nAllows customizing the text \"Where do you want the meeting to take place?\"","allOf":[{"$ref":"#/components/schemas/CustomTextSelectChannelSetting"}]},"timezonePreset":{"$ref":"#/components/schemas/TimezonePresetSetting"},"cssSetting":{"$ref":"#/components/schemas/CssSetting"},"meetingPaymentInfo":{"$ref":"#/components/schemas/MeetingPaymentInfo"},"template":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"templateId":{"type":"string","nullable":true},"lockedFields":{"description":"Field keys locked by the template admin.\nCopied from the template during assignment and push.\nUsers cannot modify fields in locked sections.","type":"array","items":{"type":"string"}},"metaSetting":{"$ref":"#/components/schemas/MetaSetting"},"metadata":{"type":"object","nullable":true,"description":"Custom key-value metadata for API integrations.\nSimilar to Stripe's metadata field.\nIncluded in webhook payloads."},"importSource":{"type":"string","description":"Defined if imported from another provider.\nCurrently mainly statistical purpose."},"videoSetting":{"$ref":"#/components/schemas/VideoSetting"},"cancellationPolicy":{"description":"Cancellation policy settings","allOf":[{"$ref":"#/components/schemas/CancellationPolicySetting"}]},"reschedulingPolicy":{"description":"Rescheduling policy settings","allOf":[{"$ref":"#/components/schemas/ReschedulingPolicySetting"}]},"recurringSetting":{"description":"Recurring events settings.\nWhen enabled, bookers can book multiple occurrences at once.\nNot supported with payment.","allOf":[{"$ref":"#/components/schemas/RecurringSetting"}]},"enableEmailBookingLimit":{"type":"boolean"},"maxBookingsPerEmail":{"type":"number","nullable":true},"emailBookingLimitPeriod":{"type":"object"},"resourceChannels":{"type":"array","items":{"$ref":"#/components/schemas/ResourceChannel"}}},"required":["meetingInfo","meetingOptions","timeslotInterval","spots","enabled","isHidden","slug","bookingMinimum","roundRobin","schedule","hideAddressField","emailQualityGuard","enableWaitlist","locations","createdAt","updatedAt","accountOwnerMatchingEnabled","accountOwnerMatchingScope","accountOwnerMatchingUserIds","accountOwnerMatchingAllowNonQueueHosts","accountOwnerMatchingFallback","enableWithdrawalButton","id","crmOptions","ics","daysIntoFuture","enableCalendarInviteNotification","useSchedule","useCompanyLogo","useTeamLogo","useCustomInvite","disableActionButtons","showConfetti","useCustomForm","inCompanyPage","formFirst","communicationSettingsId","companyId","reminderIds","isGlobalQueue","createdById","compact","disableTeamsEmail","languageSetting","customTextSelectChannel","timezonePreset","cssSetting","meetingPaymentInfo","lockedFields","metaSetting","videoSetting","cancellationPolicy","reschedulingPolicy","recurringSetting","enableEmailBookingLimit"]},"CustomLink":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"},"icon":{"type":"string"}},"required":["name","url","icon"]},"OnlineProfiles":{"type":"object","properties":{"linkedIn":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"instagram":{"type":"string"},"xing":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"customLinks":{"type":"array","items":{"$ref":"#/components/schemas/CustomLink"}},"addressStreet":{"type":"string"},"addressCity":{"type":"string"},"addressPostalCode":{"type":"string"},"addressCountry":{"type":"string"}},"required":["linkedIn","facebook","twitter","instagram","xing","phone","email","customLinks","addressStreet","addressCity","addressPostalCode","addressCountry"]},"PersonalPage":{"type":"object","properties":{"useCustomColors":{"type":"boolean"},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"headerImage":{"type":"string","nullable":true},"description":{"type":"string"},"onlineProfiles":{"$ref":"#/components/schemas/OnlineProfiles"},"meetingTypes":{"type":"array","items":{"type":"array"}},"showAllMeetingTypes":{"type":"boolean","description":"If true, show all user meeting types on business card. If false, show only selected meeting types.","default":true},"meetingTypeOrder":{"type":"array","items":{"type":"string"}}},"required":["useCustomColors","primaryColor","secondaryColor","headerImage","description","onlineProfiles","showAllMeetingTypes"]},"AcademySectionOne":{"type":"object","properties":{"onlineMarketing":{"type":"boolean","default":false},"dna":{"type":"boolean","default":false},"fundament":{"type":"boolean","default":false}}},"AcademySectionTwo":{"type":"object","properties":{"salesFunnel":{"type":"boolean","default":false},"leadsCustomers":{"type":"boolean","default":false},"generateLeads":{"type":"boolean","default":false}}},"Academy":{"type":"object","properties":{"sectionOne":{"$ref":"#/components/schemas/AcademySectionOne"},"sectionTwo":{"$ref":"#/components/schemas/AcademySectionTwo"}}},"TutorialSteps":{"type":"object","properties":{"setupProfile":{"type":"boolean","default":false},"availability":{"type":"boolean","default":false},"editAppointment":{"type":"boolean","default":false},"book":{"type":"boolean","default":false},"branding":{"type":"boolean","default":false},"team":{"type":"boolean","default":false}}},"OnboardingChecklist":{"type":"object","properties":{"isCalenderConnected":{"type":"boolean","default":false},"isVideoConferencingConnected":{"type":"boolean","default":false},"isMeetingLocationSet":{"type":"boolean","default":false},"isHoursOfAvailabilitySet":{"type":"boolean","default":false},"isBookingPageShared":{"type":"boolean","default":false},"areTeamMembersInvited":{"type":"boolean","default":false},"areRolesAssigned":{"type":"boolean","default":false},"isTeamAvailabilitySet":{"type":"boolean","default":false},"isBookingLinkSharedWithTeam":{"type":"boolean","default":false},"hideChecklist":{"type":"boolean","default":false}}},"UserMetaData":{"type":"object","properties":{"academy":{"$ref":"#/components/schemas/Academy"},"preferences":{"type":"array","items":{"type":"string"}},"teamSize":{"type":"string"},"position":{"type":"string","deprecated":true},"department":{"type":"string","deprecated":true},"skipOnboarding":{"type":"boolean"},"onboardingFinished":{"type":"boolean"},"tutorialSteps":{"$ref":"#/components/schemas/TutorialSteps"},"campaignPriority":{"type":"string","deprecated":true},"role":{"type":"string","deprecated":true},"segment":{"type":"string"},"betaAccess":{"type":"array","items":{"type":"string"}},"onboardingChecklist":{"$ref":"#/components/schemas/OnboardingChecklist"},"freeEmail":{"type":"boolean","description":"Whether the user email is from a free email provider"},"oauthEmail":{"type":"string","description":"Stores the original email when a user changes their email.\nUsed as a fallback during OAuth federation to match users\nwho changed their email after signing up via Google/Facebook/Microsoft."}}},"CalendarSyncProvider":{"type":"string","enum":["google","outlook","icloud","caldav","exchange","nextcloud","smart-we","salesforce"]},"CalendarSync":{"type":"object","properties":{"id":{"type":"string"},"type":{"allOf":[{"$ref":"#/components/schemas/CalendarSyncProvider"}]}},"required":["id","type"]},"GoogleRegisteredWebhook":{"type":"object","properties":{"connection":{"$ref":"#/components/schemas/GoogleConnection"},"syncToken":{"type":"string","nullable":true,"description":"Stores the syncToken provided by Google Calendar API for incremental event synchronization."},"calendarId":{"type":"string","nullable":true,"description":"Calendar Id to which the webhook is registered to\nAlso the calendarId to which the syncToken belongs to\nThis should not be nullable, due to existing records we\nmust keep it nullable."},"connectionId":{"type":"string"},"webhookId":{"type":"string","description":"channelId"},"resourceId":{"type":"string","description":"Acts as verification mechanism.\nFor google, it is needed to stop webhook."},"expiration":{"format":"date-time","type":"string","description":"Expiration timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Indicates when last request was recieved"}},"required":["connection","connectionId","webhookId","resourceId","expiration","updatedAt"]},"GoogleConnection":{"type":"object","properties":{"id":{"type":"string"},"sub":{"type":"string"},"primary":{"type":"boolean"},"email":{"type":"string"},"idToken":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"scope":{"type":"string","description":"Scopes as reported by google api, seperated by whitespace."},"accessTokenExpiration":{"type":"string"},"primaryCalendar":{"type":"string"},"selectedCalendars":{"type":"array","items":{"type":"string"}},"validateAvailability":{"type":"boolean"},"user":{"$ref":"#/components/schemas/User"},"userId":{"type":"string"},"registeredWebhooks":{"type":"array","items":{"$ref":"#/components/schemas/GoogleRegisteredWebhook"}},"disableAttendeeNotification":{"type":"boolean"},"cancelIfDeclinedOrDeleted":{"type":"boolean","description":"If true, the meetergo appointment will be cancelled if the attendee declines or deletes the meeting in Google calendar."},"requiresReauth":{"type":"boolean","description":"Set when the refresh token is revoked or credentials become invalid.\nThe user must reconnect via OAuth to restore syncing.\nTODO: Apply this pattern to Outlook, CalDAV, and other connection types."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"},"lastErrorCode":{"type":"string","nullable":true,"description":"Health-tracking fields powering the integration health dashboard and the\nstale-integration cron. Non-PII normalized error code (\"auth_revoked\",\n\"rate_limited\", \"network_error\", etc.) \u2014 never raw provider payloads."},"lastErrorAt":{"format":"date-time","type":"string","nullable":true},"lastNotifiedAt":{"format":"date-time","type":"string","nullable":true,"description":"When the user was last emailed about this connection being broken.\nUsed by the stale-integration cron to throttle reminders to once per\nincident \u2014 reset to null on successful reconnection."}},"required":["id","sub","primary","email","idToken","refreshToken","accessToken","scope","accessTokenExpiration","primaryCalendar","selectedCalendars","validateAvailability","userId","cancelIfDeclinedOrDeleted","requiresReauth","syncBuffersToCalendar","lastErrorCode","lastErrorAt","lastNotifiedAt"]},"CalDAVCalendarInfo":{"type":"object","properties":{"displayName":{"type":"string"},"url":{"type":"string"}},"required":["displayName","url"]},"CaldavConnection":{"type":"object","properties":{"email":{"type":"string"},"userId":{"type":"string"},"url":{"type":"string"},"selectedCalendars":{"type":"array","items":{"$ref":"#/components/schemas/CalDAVCalendarInfo"}},"validateAvailability":{"type":"boolean"},"primaryCalendar":{"type":"string"},"provider":{"type":"string","description":"Caldav provider, i.e. \"mailbox.org\". Some providers\nneed special handling.\nThis is an enum but DB schema is a string because likely\nthe enum will change often"},"disableAttendeeNotification":{"type":"boolean"},"skipCache":{"type":"boolean","description":"If true, skip caching and always fetch fresh calendar data.\nUseful for troubleshooting stale availability issues."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"},"requiresReauth":{"type":"boolean","description":"When true, the connection credentials are invalid.\nPrevents repeated error notifications and skips\navailability checks until the user reconnects.\nReset to false on successful reconnection."},"lastErrorCode":{"type":"string","nullable":true,"description":"Health-tracking fields powering the integration health dashboard and the\nstale-integration cron. See GoogleConnection for the full pattern."},"lastErrorAt":{"format":"date-time","type":"string","nullable":true},"lastNotifiedAt":{"format":"date-time","type":"string","nullable":true}},"required":["email","userId","url","selectedCalendars","validateAvailability","primaryCalendar","provider","disableAttendeeNotification","skipCache","syncBuffersToCalendar","requiresReauth","lastErrorCode","lastErrorAt","lastNotifiedAt"]},"UserWebexConnection":{"type":"object","properties":{"userId":{"type":"string"},"refreshToken":{"type":"string"},"refreshTokenExpiration":{"format":"date-time","type":"string"},"accessToken":{"type":"string"},"accessTokenExpiration":{"format":"date-time","type":"string"}},"required":["userId","refreshToken","refreshTokenExpiration","accessToken","accessTokenExpiration"]},"KMeetIntegration":{"type":"object","properties":{"calendarId":{"type":"number","nullable":true,"description":"Selected Infomaniak calendar ID for room creation. Null until user completes setup."},"customDomain":{"type":"string","nullable":true,"description":"Custom kMeet domain (e.g. 'terra.estate' -> kmeet.terra.estate). Null = use default."},"roomOptions":{"type":"object"},"id":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","createdAt","updatedAt"]},"NextcloudTalkIntegration":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"serverUrl":{"type":"string","description":"Base instance URL, e.g. 'https://cloud.example.com' (no trailing slash)."},"username":{"type":"string","description":"Nextcloud login name used for Basic auth against the Spreed OCS API."},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","serverUrl","username","createdAt","updatedAt"]},"OpenTalkIntegration":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"controllerUrl":{"type":"string","description":"Controller (API) base URL, e.g. 'https://controller.example.com'."},"webBaseUrl":{"type":"string","description":"Web frontend base URL used to build guest links, e.g. 'https://meet.example.com'."},"tokenUrl":{"type":"string","description":"Full Keycloak token endpoint, e.g. 'https://accounts.example.com/auth/realms/main/protocol/openid-connect/token'."},"clientId":{"type":"string","description":"OIDC client id used for the password grant."},"username":{"type":"string","description":"Service-user login (email) for the password grant."},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","controllerUrl","webBaseUrl","tokenUrl","clientId","username","createdAt","updatedAt"]},"BlockEventTypes":{"type":"object","properties":{"busy":{"type":"boolean"},"tentative":{"type":"boolean"},"oof":{"type":"boolean"},"workingElsewhere":{"type":"boolean"},"unknown":{"type":"boolean"}},"required":["busy","tentative","oof","workingElsewhere","unknown"]},"GraphCalendarInfo":{"type":"object","properties":{"displayName":{"type":"string"},"url":{"type":"string"},"canEdit":{"type":"boolean"}},"required":["displayName","url","canEdit"]},"GraphRegisteredWebhook":{"type":"object","properties":{"connection":{"$ref":"#/components/schemas/UserGraphConnection"},"connectionId":{"type":"string"},"webhookId":{"type":"string","description":"channelId"},"resourceId":{"type":"string","description":"Acts as verification mechanism.\nFor google, it is needed to stop webhook."},"expiration":{"format":"date-time","type":"string","description":"Expiration timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Indicates when last request was recieved"}},"required":["connection","connectionId","webhookId","resourceId","expiration","updatedAt"]},"UserGraphConnection":{"type":"object","properties":{"blockEventTypes":{"$ref":"#/components/schemas/BlockEventTypes"},"id":{"type":"string"},"email":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"primary":{"type":"boolean"},"refreshToken":{"type":"string","nullable":true},"accessToken":{"type":"string","nullable":true},"accessTokenExpiration":{"type":"string","nullable":true},"canHostOnlineMeetings":{"type":"boolean"},"validateAvailability":{"type":"boolean"},"selectedCalendars":{"type":"array","items":{"$ref":"#/components/schemas/GraphCalendarInfo"}},"primaryCalendar":{"type":"string"},"registeredWebhooks":{"type":"array","items":{"$ref":"#/components/schemas/GraphRegisteredWebhook"}},"disableAttendeeNotification":{"type":"boolean","description":"New experimental setting to disable attendee notifications.\nThis results in attendee not being added to host's calendar invite."},"enableCache":{"type":"boolean","description":"If true, fetches availabilities from cache. Otherwise from Microsoft Graph."},"cancelIfDeclinedOrDeleted":{"type":"boolean","description":"If true, the meetergo appointment will be cancelled if the attendee declines or deletes the meeting in Outlook calendar."},"requiresReauth":{"type":"boolean","description":"If true, the refresh token is invalid and the user needs to re-authorize.\nConnection is kept (preserving calendar settings) instead of being deleted."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"},"scope":{"type":"string","nullable":true,"description":"Scopes as reported by Microsoft OAuth, space-separated. Null for pre-existing connections."},"lastErrorCode":{"type":"string","nullable":true,"description":"Health-tracking fields powering the integration health dashboard and the\nstale-integration cron. See GoogleConnection for the full pattern."},"lastErrorAt":{"format":"date-time","type":"string","nullable":true},"lastNotifiedAt":{"format":"date-time","type":"string","nullable":true}},"required":["blockEventTypes","id","email","userId","primary","refreshToken","accessToken","accessTokenExpiration","canHostOnlineMeetings","validateAvailability","selectedCalendars","primaryCalendar","registeredWebhooks","disableAttendeeNotification","enableCache","cancelIfDeclinedOrDeleted","requiresReauth","syncBuffersToCalendar","lastErrorCode","lastErrorAt","lastNotifiedAt"]},"ExchangeTeamsConnection":{"type":"object","properties":{"blockEventTypes":{"deprecated":true,"allOf":[{"$ref":"#/components/schemas/BlockEventTypes"}]},"id":{"type":"string"},"userId":{"type":"string"},"graphUserId":{"type":"string"},"email":{"type":"string","deprecated":true},"primary":{"type":"boolean","deprecated":true},"refreshToken":{"type":"string","nullable":true},"accessToken":{"type":"string","nullable":true},"accessTokenExpiration":{"type":"string","nullable":true},"canHostOnlineMeetings":{"type":"boolean","description":"For new connections having OnlineMeeting.ReadWrite scope\nCan create meeting on teams for exchange/outlook account"},"validateAvailability":{"type":"boolean","deprecated":true},"selectedCalendars":{"deprecated":true,"type":"array","items":{"$ref":"#/components/schemas/GraphCalendarInfo"}},"primaryCalendar":{"type":"string","deprecated":true},"skipCache":{"type":"boolean","description":"If true, skip caching and always fetch fresh calendar data.\nUseful for troubleshooting stale availability issues."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"}},"required":["blockEventTypes","id","userId","graphUserId","primary","refreshToken","accessToken","accessTokenExpiration","canHostOnlineMeetings","validateAvailability","selectedCalendars","primaryCalendar","skipCache","syncBuffersToCalendar"]},"LinkandoConnection":{"type":"object","properties":{"userId":{"type":"string"},"refreshToken":{"type":"string"},"accessToken":{"type":"string"},"apiDomain":{"type":"string"},"email":{"type":"string"},"tenant":{"type":"string"},"image":{"type":"string"},"accessTokenExpiration":{"type":"string"}},"required":["userId","accessToken","apiDomain","accessTokenExpiration"]},"SmartWeCalendarConnection":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"email":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string"},"scope":{"type":"string"},"expiresAfter":{"type":"number"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"skipCache":{"type":"boolean","description":"If true, skip caching and always fetch fresh calendar data.\nUseful for troubleshooting stale availability issues."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"}},"required":["id","userId","email","accessToken","refreshToken","tokenType","scope","expiresAfter","createdAt","updatedAt","skipCache","syncBuffersToCalendar"]},"UserExchangeConnection":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"latestWorkingEndpoint":{"type":"string","description":"Last endpoint that was successfully called"},"username":{"type":"string","description":"Exact username to use as username (i.e. combined domain\\user or email)"},"email":{"type":"string","description":"Exchange email of user"},"validateAvailability":{"type":"boolean"},"useImpersonation":{"type":"boolean","description":"Whether to use impersonation (service account accessing another user's calendar)"},"impersonatedEmail":{"type":"string","description":"Email of the user to impersonate (when useImpersonation is true)"},"calendarFolderId":{"type":"string","description":"Calendar folder ID for Exchange 2025+ compatibility.\n- NULL for Exchange 2019 and earlier (uses WellKnownFolderName.Calendar)\n- Set automatically during connection if standard method fails"},"skipCache":{"type":"boolean","description":"If true, skip caching and always fetch fresh calendar data.\nUseful for troubleshooting stale availability issues."},"emailSyncEnabled":{"type":"boolean","description":"If true, this Exchange connection is also used to sync emails into the CRM.\nOpt-in only: defaults to false so existing calendar-only connections are\nnever touched by the email sync pipeline."},"emailSyncEnabledAt":{"format":"date-time","type":"string","nullable":true,"description":"Set when emailSyncEnabled is first activated."}},"required":["id","userId","latestWorkingEndpoint","username","email","validateAvailability","useImpersonation","skipCache","emailSyncEnabled","emailSyncEnabledAt"]},"AppleCalendarInfo":{"type":"object","properties":{"displayName":{"type":"string"},"url":{"type":"string"}},"required":["displayName","url"]},"UserAppleConnection":{"type":"object","properties":{"username":{"type":"string"},"userId":{"type":"string"},"key":{"type":"string","description":"Encrypted app-specific password generated in apple account"},"selectedCalendars":{"description":"Array of calendars that exist in the apple account. This is to\nconfigure behavior on per-calendar basis.\n\nDefaults to an empty array. If value is empty array, it treats\nthe value as if all calendars are defined with validateAvailability `true`.\nWhen user goes to settings and accesses calendars, the value is updated\nwith calendars and validateAvailability `true` so that user can\nchange the values.\n\nIf `validateAvailability` is not defined, it is the same as it being false.","type":"array","items":{"$ref":"#/components/schemas/AppleCalendarInfo"}},"validateAvailability":{"type":"boolean"},"primaryCalendar":{"type":"string"},"disableAttendeeNotification":{"type":"boolean"},"ignoreAllDayAppointments":{"type":"boolean","description":"if enabled, all day events will be marked as free.\nOtherwise, busy"},"skipCache":{"type":"boolean","description":"If true, skip caching and always fetch fresh calendar data.\nUseful for troubleshooting stale availability issues."},"syncBuffersToCalendar":{"type":"boolean","description":"Whether buffer events should be synced to this calendar connection"},"requiresReauth":{"type":"boolean","description":"When true, the connection credentials are invalid.\nPrevents repeated \"reconnect calendar\" notifications and skips\navailability checks until the user reconnects.\nReset to false on successful reconnection."},"lastErrorCode":{"type":"string","nullable":true,"description":"Health-tracking fields powering the integration health dashboard and the\nstale-integration cron. See GoogleConnection for the full pattern."},"lastErrorAt":{"format":"date-time","type":"string","nullable":true},"lastNotifiedAt":{"format":"date-time","type":"string","nullable":true}},"required":["username","userId","key","selectedCalendars","validateAvailability","primaryCalendar","disableAttendeeNotification","ignoreAllDayAppointments","skipCache","syncBuffersToCalendar","requiresReauth","lastErrorCode","lastErrorAt","lastNotifiedAt"]},"SalesforceUserMapping":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"companyId":{"type":"string"},"company":{"$ref":"#/components/schemas/Company"},"salesforceUserId":{"type":"string","description":"Salesforce User.Id"},"salesforceUserEmail":{"type":"string","description":"Salesforce user email (for display purposes)"},"validateAvailability":{"type":"boolean","description":"If true, include Salesforce calendar events in availability checks"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","companyId","salesforceUserId","salesforceUserEmail","validateAvailability","createdAt","updatedAt"]},"User":{"type":"object","properties":{"zoomEncryptionType":{"type":"object","description":"Zoom meeting encryption type preference.\n- 'enhanced_encryption': Allows web browser joining (recommended)\n- 'e2ee': End-to-end encryption, requires Zoom client\n- null: Use Zoom account default settings"},"timezone":{"type":"string","description":"User timezone affects times shown in notifications, UI etc.\nIt is set to the chosen timezone after onboarding is completed.\n`utc` timezone may suggest that onboarding was not completed yet or for the user."},"language":{"allOf":[{"$ref":"#/components/schemas/Language"}]},"meetingTypes":{"description":"Meeting types that user owns","type":"array","items":{"$ref":"#/components/schemas/MeetingType"}},"meetingTypeTemplates":{"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeTemplate"}},"availabilities":{"description":"Availabilities that user owns","type":"array","items":{"$ref":"#/components/schemas/Availability"}},"appointments":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"mainHostAppointment":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"workspaces":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"bookingLinkMeetingType":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/MeetingType"}]},"id":{"type":"string","description":"Must be uuid of existing cognito user, i.e. from token `payload.sub`.\nAll values in this row are valid UUIDs, but it is improperly\ntyped as varchar. It should be \"uuid\". Migrating all values\nto uuid works without issues, but ALL FKs have to be rewritten as well."},"companyId":{"type":"string","nullable":true,"description":"Always defined as company is now created immediately\nupon registration. Only undefined when user is initially\ncreated. Can refactor to be non nullable but need to refactor\nRegisterController as well."},"company":{"$ref":"#/components/schemas/Company"},"email":{"type":"string","description":"Email of the user. Email is null when user is a resource.\nIf resource is converted to user, email is set."},"contactEmail":{"type":"string","nullable":true,"description":"Verified contact email shown to attendees (Reply-To on booking\nconfirmations). When set, it overrides `email` for outbound mail\nbut does not affect auth/login. Required for OAuth users who\ncannot change `email` via Cognito but want a different\ncustomer-facing address. Verified via OTP before being stored."},"isAdmin":{"type":"boolean"},"isScimDisabled":{"type":"boolean","description":"Since SCIM deprovisions users by disabling and not deleting,\nthis is to keep track of users that are deprovisioned via SCIM.\n`null` and `false` are not semantically different, but it is\nonly set as boolean when actual SCIM operations occur on the entity."},"groups":{"description":"Groups the user is in","type":"array","items":{"$ref":"#/components/schemas/Group"}},"groupsAdmin":{"description":"Groups the user is admin and in","type":"array","items":{"$ref":"#/components/schemas/Group"}},"familyName":{"type":"string","description":"Family name/lastname"},"givenName":{"type":"string","description":"Given name/firstname. In the case of Resource, this is resource name"},"picture":{"type":"string","description":"Ful url to user picture hosted statically"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","nullable":true},"lastLoginAt":{"format":"date-time","type":"string","nullable":true},"title":{"type":"string"},"anonymousBooking":{"type":"boolean"},"exemptFromOutlookConnectionRequirement":{"type":"boolean","description":"When true, this host is exempt from the company-wide Microsoft/Outlook\nconnection requirement and stays bookable even without a working\nconnection. Set per host by a company admin. See\n`isHostEligibleUnderOutlookRequirement`."},"anonymousCalendarActivity":{"type":"boolean"},"keepCancelledCalendarEvents":{"type":"boolean","description":"When true, cancelling an appointment keeps the synced calendar event in\nthe host's calendar instead of deleting it: the event is marked cancelled\n(title prefixed, e.g. \"Abgesagt: \u2026\") and set to free/transparent so it no\nlonger blocks availability. Lets hosts keep a record of cancelled meetings\nfor time tracking. Default off preserves the historic delete behavior.\nHonored by `CalendarSyncService.syncAppointmentCancel`."},"slug":{"type":"string"},"showGettingStartedList":{"type":"boolean"},"recieveEmailMarketing":{"type":"boolean","description":"User opted in to recieve marketing emails"},"userStatus":{"type":"object","deprecated":true},"referralId":{"type":"string"},"personalPage":{"$ref":"#/components/schemas/PersonalPage"},"metadata":{"$ref":"#/components/schemas/UserMetaData"},"calendarSyncProviders":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CalendarSync"}]},"enableHostMeetingLimits":{"type":"boolean"},"hostMeetingLimits":{"nullable":true,"type":"object"},"analyticsViewerWorkspaces":{"description":"Workspaces this user is an analytics-only viewer of (see\n `Workspace.analyticsViewers`). Grants scoped analytics, no edit rights.","type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/Reminder"}},"queues":{"type":"array","items":{"$ref":"#/components/schemas/Queue"}},"queueUserGroups":{"type":"array","items":{"$ref":"#/components/schemas/QueueUserGroup"}},"forms":{"type":"array","items":{"$ref":"#/components/schemas/Form"}},"deals":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"googleConnections":{"type":"array","items":{"$ref":"#/components/schemas/GoogleConnection"}},"caldavConnections":{"type":"array","items":{"$ref":"#/components/schemas/CaldavConnection"}},"webexConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/UserWebexConnection"}]},"kmeetIntegration":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/KMeetIntegration"}]},"nextcloudTalkIntegration":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/NextcloudTalkIntegration"}]},"openTalkIntegration":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/OpenTalkIntegration"}]},"graphConnections":{"type":"array","items":{"$ref":"#/components/schemas/UserGraphConnection"}},"exchangeTeamsConnections":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeTeamsConnection"}},"linkandoConnection":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/LinkandoConnection"}]},"smartWeCalendarConnections":{"type":"array","items":{"$ref":"#/components/schemas/SmartWeCalendarConnection"}},"exchangeConnections":{"type":"array","items":{"$ref":"#/components/schemas/UserExchangeConnection"}},"appleConnections":{"type":"array","items":{"$ref":"#/components/schemas/UserAppleConnection"}},"salesforceUserMappings":{"type":"array","items":{"$ref":"#/components/schemas/SalesforceUserMapping"}},"defaultAvailability":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Availability"}]},"defaultAvailabilityId":{"type":"string"},"aircallUserId":{"type":"string"},"phone":{"type":"string","description":"Phone number in profile. Migrated from cognito."},"userType":{"enum":["standard","resource","api-platform","partner"],"type":"string"},"provisionalBookings":{"$ref":"#/components/schemas/ProvisionalBookingPayload"},"resourceChannels":{"type":"array","items":{"$ref":"#/components/schemas/ResourceChannel"}},"calgentActive":{"type":"boolean","description":"Calgent AI email bot settings"},"calgentMeetingTypeId":{"type":"string","nullable":true},"calgentMeetingType":{"$ref":"#/components/schemas/MeetingType"},"instantBookerMeetingTypeId":{"type":"string","nullable":true,"description":"Hidden meeting type used by the Instant Booker's \"Quick Meeting\" mode.\nCreated lazily on first use via POST /booking/instant-booker-meeting-type."},"instantBookerMeetingType":{"$ref":"#/components/schemas/MeetingType"},"alreadyTriedSlugs":{"default":[],"type":"array","items":{"type":"string"}}},"required":["timezone","language","id","isAdmin","isScimDisabled","familyName","givenName","createdAt","updatedAt","title","anonymousBooking","exemptFromOutlookConnectionRequirement","anonymousCalendarActivity","keepCancelledCalendarEvents","slug","showGettingStartedList","recieveEmailMarketing","userStatus","personalPage","calendarSyncProviders","enableHostMeetingLimits","userType","resourceChannels","calgentActive","alreadyTriedSlugs"]},"ContactCompany":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailDomain":{"type":"string"},"phoneNumber":{"type":"string"},"address":{"$ref":"#/components/schemas/Address"},"notes":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"company":{"$ref":"#/components/schemas/Company"}},"required":["id","name","emailDomain","address","createdAt","updatedAt","deletedAt"]},"FormSubmissionLog":{"type":"object","properties":{"id":{"type":"string"},"form":{"$ref":"#/components/schemas/Form"},"submissionTimestamp":{"format":"date-time","type":"string"},"workspace":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Workspace"}]},"user":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/User"}]},"anonymousVisitorId":{"type":"string","nullable":true},"submissionDataSnapshot":{"type":"object","nullable":true},"score":{"type":"number","nullable":true,"description":"Total score of the submission, computed at submission time from per-option\npointValues. Null when none of the form's fields have scoring configured\n(i.e. the form is not a scored/interview form). Stored at submission time\nso historical scores stay stable even if option point values change later."},"maxScore":{"type":"number","nullable":true,"description":"Maximum possible score for this submission, computed from the form's\nfield configuration at submission time. Lets consumers display \"8 / 10\"\nor compute a percentage without re-reading the form. Null when score\nis null."},"contact":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Contact"}]},"formId":{"type":"string"},"workspaceId":{"type":"string","nullable":true},"userId":{"type":"string","nullable":true},"contactId":{"type":"string","nullable":true}},"required":["id","form","submissionTimestamp","formId"]},"Contact":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"language":{"type":"string","description":"User's language as ISO 639-1 i.e. \"de\""},"address":{"$ref":"#/components/schemas/Address"},"notes":{"type":"string"},"tags":{"description":"Any tags. Should not allow having duplicates.\nAutomatic tags:\n\"Recurring\" - Contact with multiple bookings\n\"Optin\" - Contact has opted in in the past","type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string"},"accountOwner":{"description":"Account owner responsible for the contact.","allOf":[{"$ref":"#/components/schemas/User"}]},"accountOwnerId":{"type":"string"},"attendeeIds":{"description":"Attendee IDs that the contact originates from, in order\nto identify appointments. Not a relation for simplicity.\nEmpty if a booking never existed for the CRM Contact.\nIDs may not exist anymore (data could be deleted)","type":"array","items":{"type":"string"}},"noShowCount":{"type":"number","description":"Count of appointments where this contact was marked as no-show.\nUsed to identify unreliable contacts across multiple bookings."},"company":{"$ref":"#/components/schemas/Company"},"companyId":{"type":"string"},"contactCompany":{"deprecated":true,"allOf":[{"$ref":"#/components/schemas/ContactCompany"}]},"contactCompanyId":{"type":"string","deprecated":true},"crmCompany":{"description":"The CRM company this contact belongs to.\nThis is the new company model that replaces ContactCompany.","allOf":[{"$ref":"#/components/schemas/CrmCompany"}]},"crmCompanyId":{"type":"string"},"additionalData":{"type":"object","description":"Additional data for the contact that doesn't fit into predefined columns.\nStores:\n1. Form-submitted data where field name is not a direct column on Contact\n2. Numbered versions of data if a field matches a predefined column but already has a value\n   (e.g., if email is submitted and Contact.email exists, new value goes into additionalData.email1)"},"formSubmissionLogs":{"description":"Form submissions associated with this contact","type":"array","items":{"$ref":"#/components/schemas/FormSubmissionLog"}}},"required":["id","firstName","lastName","address","createdAt","updatedAt","deletedAt","noShowCount"]},"ContactItem":{"type":"object","properties":{"item":{"$ref":"#/components/schemas/Contact"},"appointments":{"type":"array","items":{"$ref":"#/components/schemas/Appointment"}},"nextAppointmentIso":{"type":"string"}},"required":["item","appointments"]},"PaginatedContacts":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/ContactItem"}},"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["result","page","limit","total","totalPages"]},"CreateContactDto":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string","format":"email"},"phoneNumber":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"},"crmCompanyId":{"type":"string","format":"uuid"},"accountOwnerId":{"type":"string"}}},"UpdateContactDto":{"type":"object","properties":{"additionalData":{"type":"object","description":"Partial map of custom data field values to merge into the contact's additionalData. Set a value to null to remove the key.","additionalProperties":true},"email":{"type":"string","format":"email"},"firstName":{"type":"string"},"lastName":{"type":"string"},"phoneNumber":{"type":"string"},"language":{"type":"string","description":"User's language as ISO 639-1 i.e. \"de\""},"address":{"$ref":"#/components/schemas/Address"},"notes":{"type":"string"},"tags":{"description":"Any tags. Should not allow having duplicates.\nAutomatic tags:\n\"Recurring\" - Contact with multiple bookings\n\"Optin\" - Contact has opted in in the past","type":"array","items":{"type":"string"}},"accountOwnerId":{"type":"string"},"contactCompanyId":{"type":"string","deprecated":true},"crmCompanyId":{"type":"string"}}},"BulkContactDto":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string","format":"email"},"phoneNumber":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"},"accountOwnerEmail":{"type":"string","description":"Email of a user in the same company who should be set as account owner.","format":"email"},"meetingTypeRef":{"type":"string","description":"Meeting type UUID or name within the same company."},"crmCompanyRef":{"type":"string","description":"CrmCompany UUID or display name. Unknown names are auto-created so\nspreadsheet rows that introduce new companies don't fail the row."},"additionalData":{"type":"object","description":"Arbitrary custom fields (UTM params, source data, ...) stored as additionalData."}}},"BulkCreateContactsDto":{"type":"object","properties":{"contacts":{"maxItems":1000,"type":"array","items":{"$ref":"#/components/schemas/BulkContactDto"}},"updateExisting":{"type":"boolean","description":"When true, contacts whose email already exists are updated in place\ninstead of being skipped. Default false preserves the safe\n\"skip duplicates\" behavior."}},"required":["contacts"]},"BulkCreateResult":{"type":"object","properties":{"created":{"type":"number","description":"Newly inserted contacts."},"updated":{"type":"number","description":"Existing contacts updated in place (only when updateExisting is true)."},"skipped":{"type":"number","description":"Existing/duplicate contacts left untouched."},"failed":{"type":"number","description":"Contacts that hit a technical error."},"issues":{"type":"array","items":{"type":"object"}}},"required":["created","updated","skipped","failed"]},"BulkDeleteContactsDto":{"type":"object","properties":{"contactIds":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid"}}},"required":["contactIds"]},"BulkDeleteResult":{"type":"object","properties":{"requested":{"type":"number"},"deleted":{"type":"number"},"skipped":{"type":"number"}},"required":["requested","deleted","skipped"]},"WidgetLeadDto":{"type":"object","properties":{"companyId":{"type":"string","maxLength":64},"firstName":{"type":"string","maxLength":100},"lastName":{"type":"string","maxLength":100},"email":{"type":"string","maxLength":320,"format":"email"},"phoneNumber":{"type":"string","maxLength":40},"note":{"type":"string","maxLength":2000},"transcript":{"type":"string","maxLength":16000}},"required":["companyId"]},"PipelineStageDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"order":{"type":"number"},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"winProbability":{"type":"number"},"rottingDays":{"type":"number"},"requiredCustomFields":{"type":"array","items":{"type":"string"}},"pipelineId":{"type":"string"}},"required":["id","name","color","order","isWon","isLost","winProbability","pipelineId"]},"PipelineDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isDefault":{"type":"boolean"},"companyId":{"type":"string"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStageDto"}},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","isDefault","companyId","createdAt","updatedAt"]},"CreatePipelineStageDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"color":{"type":"string","maxLength":20},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"winProbability":{"type":"number","minimum":0,"maximum":100},"rottingDays":{"type":"number"},"requiredCustomFields":{"type":"array","items":{"type":"string"}}},"required":["name","color"]},"CreatePipelineDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"isDefault":{"type":"boolean"},"stages":{"type":"array","items":{"$ref":"#/components/schemas/CreatePipelineStageDto"}}},"required":["name"]},"UpdatePipelineDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"isDefault":{"type":"boolean"}}},"ReorderStagesDto":{"type":"object","properties":{"stageIds":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["stageIds"]},"UpdatePipelineStageDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"color":{"type":"string","maxLength":20},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"winProbability":{"type":"number","minimum":0,"maximum":100},"rottingDays":{"type":"number"},"requiredCustomFields":{"type":"array","items":{"type":"string"}}}},"CrmCustomFieldDto":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["text","textarea","number","currency","date","select","multiselect","checkbox"]},"required":{"type":"boolean"},"options":{"type":"array","items":{"type":"string"}},"order":{"type":"number"}},"required":["id","key","label","type","required","order"]},"CrmCustomFieldsDto":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/CrmCustomFieldDto"}}},"required":["fields"]},"UpdateCrmCustomFieldsDto":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/CrmCustomFieldDto"}}},"required":["fields"]},"CreateTaskDto":{"type":"object","properties":{"title":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":10000},"type":{"enum":["call","email","meeting","follow_up","todo"],"type":"string"},"priority":{"enum":["low","medium","high"],"type":"string"},"dueDate":{"type":"string"},"reminderAt":{"type":"string"},"assigneeId":{"type":"string"},"contactId":{"type":"string","format":"uuid"},"dealId":{"type":"string","format":"uuid"},"crmCompanyId":{"type":"string","format":"uuid"}},"required":["title","type","dueDate"]},"TaskDto":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"enum":["call","email","meeting","follow_up","todo"],"type":"string"},"priority":{"enum":["low","medium","high"],"type":"string"},"dueDate":{"format":"date-time","type":"string"},"reminderAt":{"format":"date-time","type":"string"},"completed":{"type":"boolean"},"completedAt":{"format":"date-time","type":"string"},"assigneeId":{"type":"string"},"companyId":{"type":"string"},"contactId":{"type":"string"},"dealId":{"type":"string"},"crmCompanyId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"isOverdue":{"type":"boolean"},"contact":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"}},"required":["id","firstName","lastName"]},"deal":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"value":{"type":"number"}},"required":["id","name"]},"crmCompany":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"assignee":{"type":"object","properties":{"id":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"email":{"type":"string"}},"required":["id","email"]}},"required":["id","title","type","priority","dueDate","completed","assigneeId","companyId","createdAt","updatedAt"]},"TaskListDto":{"type":"object","properties":{"tasks":{"type":"array","items":{"$ref":"#/components/schemas/TaskDto"}},"total":{"type":"number"},"page":{"type":"number"},"limit":{"type":"number"},"totalPages":{"type":"number"}},"required":["tasks","total","page","limit","totalPages"]},"TaskSummaryDto":{"type":"object","properties":{"totalTasks":{"type":"number"},"completedTasks":{"type":"number"},"overdueTasks":{"type":"number"},"dueTodayTasks":{"type":"number"},"dueThisWeekTasks":{"type":"number"},"byType":{"type":"array","items":{"type":"object","properties":{"type":{"enum":["call","email","meeting","follow_up","todo"],"type":"string"},"count":{"type":"number"}},"required":["type","count"]}},"byPriority":{"type":"array","items":{"type":"object","properties":{"priority":{"enum":["low","medium","high"],"type":"string"},"count":{"type":"number"}},"required":["priority","count"]}}},"required":["totalTasks","completedTasks","overdueTasks","dueTodayTasks","dueThisWeekTasks","byType","byPriority"]},"UpdateTaskDto":{"type":"object","properties":{"title":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":10000},"type":{"enum":["call","email","meeting","follow_up","todo"],"type":"string"},"priority":{"enum":["low","medium","high"],"type":"string"},"dueDate":{"type":"string"},"reminderAt":{"type":"string"},"assigneeId":{"type":"string"},"contactId":{"type":"string","format":"uuid"},"dealId":{"type":"string","format":"uuid"},"crmCompanyId":{"type":"string","format":"uuid"}}},"CreateDealContactDto":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"role":{"enum":["primary","decision_maker","influencer","user","other"],"type":"string"},"isPrimary":{"type":"boolean"}},"required":["contactId"]},"CreateDealDto":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"value":{"type":"number"},"currency":{"type":"string","maxLength":10},"expectedCloseDate":{"type":"string"},"notes":{"type":"string","maxLength":10000},"crmCompanyId":{"type":"string","format":"uuid"},"contactId":{"type":"string","format":"uuid"},"pipelineId":{"type":"string","format":"uuid"},"stageId":{"type":"string","format":"uuid"},"ownerId":{"type":"string"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/CreateDealContactDto"}},"customFields":{"type":"object"}},"required":["name","pipelineId","stageId"]},"DealContactDto":{"type":"object","properties":{"id":{"type":"string"},"dealId":{"type":"string"},"contactId":{"type":"string"},"role":{"enum":["primary","decision_maker","influencer","user","other"],"type":"string"},"isPrimary":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"contact":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"}},"required":["id","firstName","lastName"]}},"required":["id","dealId","contactId","role","isPrimary","createdAt"]},"DealDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"value":{"type":"number"},"currency":{"type":"string"},"expectedCloseDate":{"format":"date-time","type":"string"},"notes":{"type":"string"},"crmCompanyId":{"type":"string"},"contactId":{"type":"string"},"pipelineId":{"type":"string"},"stageId":{"type":"string"},"ownerId":{"type":"string"},"companyId":{"type":"string"},"lostReason":{"enum":["price","competition","timing","no_budget","no_response","feature_missing","other"],"type":"string"},"lostReasonNote":{"type":"string"},"wonAt":{"format":"date-time","type":"string"},"lostAt":{"format":"date-time","type":"string"},"enteredStageAt":{"format":"date-time","type":"string"},"customFields":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"crmCompany":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"}},"required":["id","name"]},"contact":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"}},"required":["id","firstName","lastName"]},"stage":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"winProbability":{"type":"number"},"rottingDays":{"type":"number"}},"required":["id","name","color","isWon","isLost","winProbability"]},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/DealContactDto"}},"owner":{"type":"object","properties":{"id":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"email":{"type":"string"}},"required":["id","email"]},"isRotting":{"type":"boolean"}},"required":["id","name","pipelineId","stageId","ownerId","companyId","enteredStageAt","createdAt","updatedAt"]},"Object":{"type":"object","properties":{}},"DealListDto":{"type":"object","properties":{"deals":{"type":"array","items":{"$ref":"#/components/schemas/DealDto"}},"total":{"type":"number"},"page":{"type":"number"},"limit":{"type":"number"},"totalPages":{"type":"number"}},"required":["deals","total","page","limit","totalPages"]},"DealSummaryDto":{"type":"object","properties":{"totalDeals":{"type":"number"},"totalValue":{"type":"number"},"weightedForecast":{"type":"number"},"openDeals":{"type":"number"},"wonDeals":{"type":"number"},"lostDeals":{"type":"number"},"byStage":{"type":"array","items":{"type":"object","properties":{"stageId":{"type":"string"},"stageName":{"type":"string"},"stageColor":{"type":"string"},"count":{"type":"number"},"value":{"type":"number"},"weightedValue":{"type":"number"}},"required":["stageId","stageName","stageColor","count","value","weightedValue"]}}},"required":["totalDeals","totalValue","weightedForecast","openDeals","wonDeals","lostDeals","byStage"]},"UpdateDealDto":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"value":{"type":"number"},"currency":{"type":"string","maxLength":10},"expectedCloseDate":{"type":"string","nullable":true},"notes":{"type":"string","maxLength":10000},"crmCompanyId":{"type":"string","nullable":true,"format":"uuid"},"contactId":{"type":"string","nullable":true,"format":"uuid"},"stageId":{"type":"string","format":"uuid"},"ownerId":{"type":"string"},"customFields":{"type":"object"}}},"MarkDealAsWonDto":{"type":"object","properties":{"wonStageId":{"type":"string","format":"uuid"}}},"MarkDealAsLostDto":{"type":"object","properties":{"lostReason":{"enum":["price","competition","timing","no_budget","no_response","feature_missing","other"],"type":"string"},"lostReasonNote":{"type":"string","maxLength":1000},"lostStageId":{"type":"string","format":"uuid"}},"required":["lostReason"]},"ReopenDealDto":{"type":"object","properties":{"stageId":{"type":"string","format":"uuid"}}},"UpdateDealContactDto":{"type":"object","properties":{"role":{"enum":["primary","decision_maker","influencer","user","other"],"type":"string"},"isPrimary":{"type":"boolean"}}},"DealActivityDto":{"type":"object","properties":{"id":{"type":"string"},"dealId":{"type":"string"},"activityType":{"type":"string"},"fromStageId":{"type":"string"},"fromStageName":{"type":"string"},"toStageId":{"type":"string"},"toStageName":{"type":"string"},"changedById":{"type":"string"},"changedByName":{"type":"string"},"metadata":{"type":"object"},"changedAt":{"format":"date-time","type":"string"}},"required":["id","dealId","activityType","changedById","changedAt"]},"CreateCrmCompanyDto":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"domain":{"type":"string","maxLength":255},"industry":{"type":"string","maxLength":100},"size":{"enum":["1-10","11-50","51-200","201-500","501-1000","1001+"],"type":"string"},"website":{"type":"string","maxLength":500},"phoneNumber":{"type":"string","maxLength":50},"addressLine1":{"type":"string","maxLength":255},"addressLine2":{"type":"string","maxLength":255},"addressCity":{"type":"string","maxLength":100},"addressZip":{"type":"string","maxLength":20},"addressCountry":{"type":"string","maxLength":100},"notes":{"type":"string","maxLength":10000},"ownerId":{"type":"string"},"customFields":{"type":"object"}},"required":["name"]},"CrmCompanyDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"size":{"enum":["1-10","11-50","51-200","201-500","501-1000","1001+"],"type":"string"},"website":{"type":"string"},"phoneNumber":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"line3":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string"}}},"notes":{"type":"string"},"ownerId":{"type":"string"},"companyId":{"type":"string"},"customFields":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"email":{"type":"string"}},"required":["id","email"]},"contactsCount":{"type":"number"},"dealsCount":{"type":"number"},"totalDealsValue":{"type":"number"}},"required":["id","name","companyId","createdAt","updatedAt"]},"CrmCompanyListDto":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/CrmCompanyDto"}},"total":{"type":"number"},"page":{"type":"number"},"limit":{"type":"number"},"totalPages":{"type":"number"}},"required":["result","total","page","limit","totalPages"]},"CrmCompanySummaryDto":{"type":"object","properties":{"totalCompanies":{"type":"number"},"totalDealsValue":{"type":"number"},"companiesWithDeals":{"type":"number"},"byIndustry":{"type":"array","items":{"type":"object","properties":{"industry":{"type":"string"},"count":{"type":"number"}},"required":["industry","count"]}},"bySize":{"type":"array","items":{"type":"object","properties":{"size":{"enum":["1-10","11-50","51-200","201-500","501-1000","1001+"],"type":"string"},"count":{"type":"number"}},"required":["size","count"]}}},"required":["totalCompanies","totalDealsValue","companiesWithDeals","byIndustry","bySize"]},"UpdateCrmCompanyDto":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"domain":{"type":"string","maxLength":255},"industry":{"type":"string","maxLength":100},"size":{"enum":["1-10","11-50","51-200","201-500","501-1000","1001+"],"type":"string"},"website":{"type":"string","maxLength":500},"phoneNumber":{"type":"string","maxLength":50},"addressLine1":{"type":"string","maxLength":255},"addressLine2":{"type":"string","maxLength":255},"addressCity":{"type":"string","maxLength":100},"addressZip":{"type":"string","maxLength":20},"addressCountry":{"type":"string","maxLength":100},"notes":{"type":"string","maxLength":10000},"ownerId":{"type":"string"},"customFields":{"type":"object"}}},"CreateCrmNoteDto":{"type":"object","properties":{"content":{"type":"string","description":"Rich text content (HTML supported)"},"isPinned":{"type":"boolean","description":"Pin the note to the top"},"dealId":{"type":"string","format":"uuid","description":"Deal ID to attach the note to"},"contactId":{"type":"string","format":"uuid","description":"Contact ID to attach the note to"},"crmCompanyId":{"type":"string","format":"uuid","description":"CRM Company ID to attach the note to"}},"required":["content"]},"CrmNoteDto":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"string"},"isPinned":{"type":"boolean"},"dealId":{"type":"string"},"contactId":{"type":"string"},"crmCompanyId":{"type":"string"},"authorId":{"type":"string"},"authorName":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","content","isPinned","authorId","createdAt","updatedAt"]},"UpdateCrmNoteDto":{"type":"object","properties":{"content":{"type":"string","description":"Rich text content (HTML supported)"},"isPinned":{"type":"boolean","description":"Pin the note to the top"}}},"CreateCrmAttachmentDto":{"type":"object","properties":{"fileAssetId":{"type":"string","description":"File asset ID from the file upload system"},"description":{"type":"string","description":"Description/label for the attachment"},"dealId":{"type":"string","format":"uuid","description":"Deal ID to attach the file to"},"contactId":{"type":"string","format":"uuid","description":"Contact ID to attach the file to"},"crmCompanyId":{"type":"string","format":"uuid","description":"CRM Company ID to attach the file to"}},"required":["fileAssetId"]},"CrmAttachmentDto":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"},"fileAssetId":{"type":"string"},"filename":{"type":"string"},"originalFilename":{"type":"string"},"mimeType":{"type":"string"},"sizeBytes":{"type":"number"},"dealId":{"type":"string"},"contactId":{"type":"string"},"crmCompanyId":{"type":"string"},"uploadedById":{"type":"string"},"uploadedByName":{"type":"string"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","fileAssetId","filename","originalFilename","mimeType","sizeBytes","createdAt"]},"UpdateCrmAttachmentDto":{"type":"object","properties":{"description":{"type":"string","description":"Description/label for the attachment"}}},"CreateCrmCommunicationDto":{"type":"object","properties":{"type":{"enum":["call","email","sms","whatsapp"],"type":"string"},"direction":{"enum":["inbound","outbound"],"type":"string"},"subject":{"type":"string","description":"Subject line (for emails)"},"body":{"type":"string","description":"Body/notes about the communication"},"durationSeconds":{"type":"number","minimum":0,"description":"Duration in seconds (for calls)"},"outcome":{"enum":["connected","voicemail","no_answer","busy"],"type":"string","description":"Outcome (for calls)"},"occurredAt":{"type":"string","description":"When the communication occurred"},"externalId":{"type":"string","description":"External ID (email thread ID, etc.)"},"dealId":{"type":"string","format":"uuid","description":"Deal ID to attach the communication to"},"contactId":{"type":"string","format":"uuid","description":"Contact ID to attach the communication to"},"crmCompanyId":{"type":"string","format":"uuid","description":"CRM Company ID to attach the communication to"}},"required":["type","direction"]},"CrmCommunicationDto":{"type":"object","properties":{"id":{"type":"string"},"type":{"enum":["call","email","sms","whatsapp"],"type":"string"},"direction":{"enum":["inbound","outbound"],"type":"string"},"subject":{"type":"string"},"body":{"type":"string"},"durationSeconds":{"type":"number"},"outcome":{"enum":["connected","voicemail","no_answer","busy"],"type":"string"},"externalId":{"type":"string"},"dealId":{"type":"string"},"contactId":{"type":"string"},"crmCompanyId":{"type":"string"},"loggedById":{"type":"string"},"loggedByName":{"type":"string"},"occurredAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","type","direction","createdAt","updatedAt"]},"UpdateCrmCommunicationDto":{"type":"object","properties":{"type":{"enum":["call","email","sms","whatsapp"],"type":"string"},"direction":{"enum":["inbound","outbound"],"type":"string"},"subject":{"type":"string","description":"Subject line (for emails)"},"body":{"type":"string","description":"Body/notes about the communication"},"durationSeconds":{"type":"number","minimum":0,"description":"Duration in seconds (for calls)"},"outcome":{"enum":["connected","voicemail","no_answer","busy"],"type":"string","description":"Outcome (for calls)"},"occurredAt":{"type":"string","description":"When the communication occurred"}}},"DuplicateContactDto":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"},"crmCompanyName":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"bookingsCount":{"type":"number","description":"Number of bookings for this contact"},"dealsCount":{"type":"number","description":"Number of deals linked to this contact"},"notesCount":{"type":"number","description":"Number of notes on this contact"}},"required":["id","firstName","lastName","createdAt","bookingsCount","dealsCount","notesCount"]},"DuplicateGroupDto":{"type":"object","properties":{"matchField":{"type":"object","description":"The field that matches (email or phone)"},"matchValue":{"type":"string","description":"The matching value"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateContactDto"}}},"required":["matchField","matchValue","contacts"]},"FindDuplicatesResponseDto":{"type":"object","properties":{"duplicates":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateGroupDto"}},"totalGroups":{"type":"number"}},"required":["duplicates","totalGroups"]},"MergeContactsDto":{"type":"object","properties":{"primaryContactId":{"type":"string","format":"uuid","description":"ID of the contact to keep (primary)"},"secondaryContactIds":{"description":"IDs of the contacts to merge into the primary","type":"array","items":{"type":"string","format":"uuid"}},"firstName":{"type":"string","description":"Optional: Override first name from secondary"},"lastName":{"type":"string","description":"Optional: Override last name from secondary"},"email":{"type":"string","description":"Optional: Override email from secondary"},"phoneNumber":{"type":"string","description":"Optional: Override phone number from secondary"}},"required":["primaryContactId","secondaryContactIds"]},"MergeResultDto":{"type":"object","properties":{"contact":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"phoneNumber":{"type":"string"}},"required":["id","firstName","lastName"]},"mergedCount":{"type":"number","description":"Number of contacts merged"},"transferred":{"type":"object","properties":{"deals":{"type":"number"},"notes":{"type":"number"},"attachments":{"type":"number"},"tasks":{"type":"number"},"attendeeIds":{"type":"number"}},"required":["deals","notes","attachments","tasks","attendeeIds"]}},"required":["contact","mergedCount","transferred"]},"AvailabilityExceptionDto":{"type":"object","properties":{"ownerId":{"type":"string"},"ownerType":{"allOf":[{"$ref":"#/components/schemas/AvailabilityExceptionOwner"}]},"available":{"type":"boolean"},"start":{"type":"string"},"end":{"type":"string"},"title":{"type":"string"},"note":{"type":"string"},"createdAt":{"type":"string"},"deletedAt":{"type":"string","nullable":true},"id":{"type":"number"}},"required":["ownerId","ownerType","available","start","end","createdAt","id"]},"AvailabilityDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"schedule":{"$ref":"#/components/schemas/WeeklySchedule"},"timezone":{"type":"string"},"availabilityExceptions":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityExceptionDto"}},"isDefault":{"type":"boolean"},"createdAt":{"type":"string"},"deletedAt":{"type":"string"},"useExplicitAvailability":{"type":"boolean","description":"When enabled, only calendar events with the specified title will be used as available slots."},"explicitAvailabilityEventTitle":{"type":"string","nullable":true,"description":"The calendar event title to look for when useExplicitAvailability is enabled."}},"required":["id","name","schedule","timezone","availabilityExceptions","isDefault","createdAt"]},"AvailabilityPerUserDto":{"type":"object","properties":{"userId":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityDto"}}},"required":["userId","items"]},"BulkHolidayExceptionsDto":{"type":"object","properties":{"userIds":{"maxItems":100,"type":"array","items":{"type":"string"}},"year":{"type":"number","minimum":2025,"maximum":2027},"germanState":{"enum":["BW","BY","ST","MV","BE","BB","HE","NW","RP","SL","SN","TH","SH","HH","NI","HB"],"type":"string"},"country":{"enum":["DE","AT","BE","CA","DK","NL","EE","FI","FR","IT","NZ","ES","SE","CH","US"],"type":"string"}},"required":["userIds","year","country"]},"ApplyAvailabilityToUsersDto":{"type":"object","properties":{"userIds":{"maxItems":100,"type":"array","items":{"type":"string"}},"setAsDefault":{"type":"boolean"}},"required":["userIds"]},"CreateAvailabilityExceptionDto":{"type":"object","properties":{"available":{"type":"boolean"},"availabilityId":{"type":"string","description":"Optional availability id, if not provided uses default availability."},"start":{"type":"string"},"end":{"type":"string"},"title":{"type":"string"},"note":{"type":"string"}},"required":["available","start","end"]},"CreateAvailabilityDto":{"type":"object","properties":{"name":{"type":"string"},"schedule":{"description":"Weekly recurring schedule. If omitted, defaults to all days disabled (useful for exceptions-only availability).","allOf":[{"$ref":"#/components/schemas/WeeklySchedule"}]},"timezone":{"type":"string"},"exceptions":{"description":"Availability exceptions for specific datetime ranges.","type":"array","items":{"$ref":"#/components/schemas/CreateAvailabilityExceptionDto"}}},"required":["name","timezone"]},"CreateHolidayExpectionsDto":{"type":"object","properties":{"year":{"type":"number","minimum":2025,"maximum":2027},"germanState":{"enum":["BW","BY","ST","MV","BE","BB","HE","NW","RP","SL","SN","TH","SH","HH","NI","HB"],"type":"string"},"country":{"enum":["DE","AT","BE","CA","DK","NL","EE","FI","FR","IT","NZ","ES","SE","CH","US"],"type":"string"}},"required":["year","country"]},"PartialWeeklySchedule":{"type":"object","properties":{"monday":{"$ref":"#/components/schemas/DaySchedule"},"tuesday":{"$ref":"#/components/schemas/DaySchedule"},"wednesday":{"$ref":"#/components/schemas/DaySchedule"},"thursday":{"$ref":"#/components/schemas/DaySchedule"},"friday":{"$ref":"#/components/schemas/DaySchedule"},"saturday":{"$ref":"#/components/schemas/DaySchedule"},"sunday":{"$ref":"#/components/schemas/DaySchedule"}},"required":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]},"UpdateAvailabilityDto":{"type":"object","properties":{"name":{"type":"string"},"schedule":{"$ref":"#/components/schemas/PartialWeeklySchedule"},"timezone":{"type":"string"},"useExplicitAvailability":{"type":"boolean"},"explicitAvailabilityEventTitle":{"type":"string","nullable":true}}},"CreateResourceChannelDto":{"type":"object","properties":{"resourceId":{"type":"string","description":"Resource user ID"},"name":{"type":"string","description":"Display name for the resource channel. Defaults to the resource name"},"availabilityId":{"type":"string","format":"uuid","description":"Availability ID for the resource"},"groupName":{"type":"string","description":"Group name for resource grouping."},"groupMemberIndex":{"type":"number","minimum":0,"description":"Group member index for ordering"}},"required":["resourceId"]},"UpdateDaysIntoFutureDto":{"type":"object","properties":{"mode":{"type":"string","enum":["limit","range","forever"],"description":"Booking future mode: \"limit\" (rolling window), \"range\" (fixed dates), or \"forever\" (no limit)","example":"limit"},"bookingLimit":{"type":"number","minimum":1,"description":"Maximum booking window in minutes from now (only for mode: \"limit\")","example":43200},"rangeMin":{"type":"string","description":"Minimum date for bookings (only for mode: \"range\")","example":"2025-01-01T00:00:00.000Z","format":"date-time"},"rangeMax":{"type":"string","description":"Maximum date for bookings (only for mode: \"range\")","example":"2025-12-31T23:59:59.000Z","format":"date-time"},"countMode":{"type":"string","enum":["calendar","weekday"],"description":"Whether to count calendar days or weekdays only (Mon-Fri). Only relevant for mode: \"limit\"","example":"calendar"}}},"UpdateIcsV4Dto":{"type":"object","properties":{"title":{"description":"Calendar invite title template. Pass a string for single-language or an object like `{ \"en\": \"...\", \"de\": \"...\" }` for multi-language.","oneOf":[{"type":"string","example":"{!M.Guest.Fullname} / {!M.Host.Fullname}"},{"type":"object","example":{"en":"{!M.Guest.Fullname} / {!M.Host.Fullname}","de":"{!M.Guest.Fullname} / {!M.Host.Fullname}"}}]},"description":{"description":"Calendar invite description template. Supports dynamic tags like `{!M.Guest.Email}`, `{!M.Guest.Phone}`, `{!M.Meeting.Name}`. Pass a string for single-language or an object for multi-language.","oneOf":[{"type":"string","example":"{!M.Meeting.Name}\nEmail: {!M.Guest.Email}\nPhone: {!M.Guest.Phone}"},{"type":"object","example":{"en":"{!M.Meeting.Name}\nEmail: {!M.Guest.Email}","de":"{!M.Meeting.Name}\nE-Mail: {!M.Guest.Email}"}}]},"location":{"description":"Calendar invite location template. Pass a string for single-language or an object for multi-language.","oneOf":[{"type":"string","example":"{!M.Meeting.Venue}"},{"type":"object","example":{"en":"{!M.Meeting.Venue}","de":"{!M.Meeting.Venue}"}}]}}},"CreateMeetingTypeOptionsDto":{"type":"object","properties":{"createOneTimeLink":{"type":"boolean","description":"Create and return a one-time booking link"}}},"CreateMeetingTypeV4Dto":{"type":"object","properties":{"meetingInfo":{"description":"Meeting information","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"meetingOptions":{"description":"Meeting options","allOf":[{"$ref":"#/components/schemas/MeetingOptions"}]},"slug":{"type":"string","description":"URL slug for the meeting type"},"spots":{"type":"number","minimum":1,"maximum":100,"description":"Number of available spots"},"isGlobalQueue":{"type":"boolean","description":"Create as global queue meeting type"},"workspaceId":{"type":"string","description":"Workspace ID for workspace-based meeting types"},"userId":{"type":"string","description":"User ID for user-specific meeting types"},"locations":{"description":"Available locations","example":["Office A","Conference Room B","Remote"],"type":"array","items":{"type":"string"}},"resourceChannels":{"description":"Resource channels for the meeting type","type":"array","items":{"$ref":"#/components/schemas/CreateResourceChannelDto"}},"cancellationPolicy":{"description":"Cancellation policy settings","allOf":[{"$ref":"#/components/schemas/CancellationPolicySetting"}]},"reschedulingPolicy":{"description":"Rescheduling policy settings","allOf":[{"$ref":"#/components/schemas/ReschedulingPolicySetting"}]},"daysIntoFuture":{"description":"Future booking window settings","allOf":[{"$ref":"#/components/schemas/UpdateDaysIntoFutureDto"}]},"availabilityId":{"type":"string","format":"uuid","description":"ID of an existing availability to use. Mutually exclusive with \"availability\"."},"availability":{"description":"Create a new availability inline. Mutually exclusive with \"availabilityId\".","allOf":[{"$ref":"#/components/schemas/CreateAvailabilityDto"}]},"ics":{"description":"Calendar invite (ICS) settings. Customize the title, description, and location of calendar events. Each field accepts a plain string (stored under the default language) or an object with language keys.","allOf":[{"$ref":"#/components/schemas/UpdateIcsV4Dto"}]},"metadata":{"type":"object","description":"Key-value metadata for integrations","example":{"ticketId":"EVAL-12345"}},"internalNotes":{"type":"string","nullable":true,"maxLength":5000,"description":"Internal note for organizers. Never shown to customers.","example":"pi009_Markt Tansas Offenbach_TSO \u2013 Partner: Max M\u00fcller"},"options":{"description":"Request options for additional operations","allOf":[{"$ref":"#/components/schemas/CreateMeetingTypeOptionsDto"}]}},"required":["meetingInfo"]},"WorkspaceBasicDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"]},"UserBasicDto":{"type":"object","properties":{"id":{"type":"string"},"givenName":{"type":"string"},"familyName":{"type":"string"},"picture":{"type":"string"},"slug":{"type":"string"},"userType":{"type":"string"}},"required":["id","givenName","familyName","slug","userType"]},"AvailabilityBasicDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"FormBasicDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"ReminderBasicDto":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"]},"OneTimeBookingLinkResponseDto":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","description":"Full URL for the one-time booking page"},"meetingTypeId":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","url","meetingTypeId","createdAt"]},"MeetingTypeResponseDto":{"type":"object","properties":{"id":{"type":"string"},"meetingInfo":{"$ref":"#/components/schemas/MeetingInfo"},"meetingOptions":{"$ref":"#/components/schemas/MeetingOptions"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"ics":{"$ref":"#/components/schemas/IcsInfo"},"timeslotInterval":{"type":"number"},"spots":{"type":"number"},"enabled":{"type":"boolean"},"slug":{"type":"string"},"bookingMinimum":{"type":"number"},"daysIntoFuture":{"$ref":"#/components/schemas/DaysIntoFutureSetting"},"enableCalendarInviteNotification":{"type":"boolean"},"roundRobin":{"type":"array","items":{"type":"string"}},"useSchedule":{"type":"boolean"},"useCompanyLogo":{"type":"boolean"},"useCustomInvite":{"type":"boolean"},"disableActionButtons":{"type":"boolean"},"useCustomForm":{"type":"boolean"},"inCompanyPage":{"type":"boolean"},"formFirst":{"type":"boolean"},"locations":{"type":"array","items":{"type":"string"}},"isGlobalQueue":{"type":"boolean"},"compact":{"type":"boolean"},"disableTeamsEmail":{"type":"boolean"},"languageSetting":{"$ref":"#/components/schemas/LanguageSetting"},"customTextSelectChannel":{"$ref":"#/components/schemas/CustomTextSelectChannelSetting"},"timezonePreset":{"$ref":"#/components/schemas/TimezonePresetSetting"},"cssSetting":{"$ref":"#/components/schemas/CssSetting"},"metaSetting":{"$ref":"#/components/schemas/MetaSetting"},"companyId":{"type":"string"},"createdById":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"deletedAt":{"type":"string"},"workspaceId":{"type":"string"},"userId":{"type":"string"},"formId":{"type":"string"},"availabilityId":{"type":"string"},"queueId":{"type":"string"},"reminderIds":{"type":"array","items":{"type":"string"}},"workspace":{"$ref":"#/components/schemas/WorkspaceBasicDto"},"user":{"$ref":"#/components/schemas/UserBasicDto"},"createdBy":{"$ref":"#/components/schemas/UserBasicDto"},"availability":{"$ref":"#/components/schemas/AvailabilityBasicDto"},"form":{"$ref":"#/components/schemas/FormBasicDto"},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/ReminderBasicDto"}},"metadata":{"type":"object","nullable":true,"description":"Key-value metadata for integrations","example":{"ticketId":"EVAL-12345"}},"internalNotes":{"type":"string","nullable":true,"description":"Internal note for organizers. Never shown to customers."},"oneTimeLink":{"description":"One-time booking link (only present when requested via options.createOneTimeLink)","allOf":[{"$ref":"#/components/schemas/OneTimeBookingLinkResponseDto"}]}},"required":["id","meetingInfo","meetingOptions","crmOptions","ics","timeslotInterval","spots","enabled","slug","bookingMinimum","daysIntoFuture","enableCalendarInviteNotification","roundRobin","useSchedule","useCompanyLogo","useCustomInvite","disableActionButtons","useCustomForm","inCompanyPage","formFirst","locations","isGlobalQueue","compact","disableTeamsEmail","languageSetting","customTextSelectChannel","timezonePreset","cssSetting","metaSetting","companyId","createdById"]},"MeetingTypeDomain":{"type":"string","enum":["all","user","group","workspace","me"]},"UpdateMeetingInfoDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the meeting type","example":"Sales Discovery Call"},"description":{"type":"string","description":"Description of the meeting type","example":"A 30-minute call to discuss your requirements and how we can help"},"enableRedirect":{"type":"boolean","description":"Enable redirect after booking completion","example":false},"redirect":{"type":"string","format":"uri","description":"Redirect URL to navigate after booking","example":"https://example.com/thank-you"},"passEventDetailsToRedirect":{"type":"boolean","description":"Pass event details (invitee name, email, form answers) as query params to redirect URL","example":true},"duration":{"type":"number","minimum":5,"maximum":480,"description":"Primary duration in minutes","example":30},"channel":{"description":"Meeting channel/location type","example":"zoom","allOf":[{"$ref":"#/components/schemas/MeetingTypeChannel"}]},"customChannelName":{"type":"string","description":"Custom name for the meeting channel","example":"My Custom Meeting Room"},"customChannelLink":{"type":"string","format":"uri","description":"Custom link for the meeting channel","example":"https://custom.meeting.link/room-123"},"connectChannelName":{"type":"string","description":"Custom display name for the connect channel","example":"Video Consultation"},"groupBooking":{"type":"boolean","description":"Enable group booking (multiple attendees per slot)","example":false},"showAvailableSlots":{"type":"boolean","description":"Show available spots count on the booking page","example":true},"enrichInvitee":{"type":"boolean","description":"Enable invitee data enrichment","example":false},"confirmationButton":{"description":"Confirmation button settings","allOf":[{"$ref":"#/components/schemas/ConfirmationButton"}]},"bufferBefore":{"type":"number","minimum":0,"maximum":120,"description":"Buffer time before meeting in minutes","example":15},"bufferAfter":{"type":"number","minimum":0,"maximum":120,"description":"Buffer time after meeting in minutes","example":15},"bufferMustStayWithinWorkingHours":{"type":"boolean","description":"Only offer slots where buffer fits within working hours (no spillover into breaks or after-hours)","example":false}}},"MeetingTypeDoubleOptInSetting":{"type":"string","enum":["disabled","enabled","useCompanySettings"],"description":"Double opt-in confirmation setting"},"UpdateMeetingOptionsDto":{"type":"object","properties":{"allowedDurations":{"uniqueItems":true,"description":"Additional duration options in minutes (shown alongside primary duration)","example":[15,30,60],"type":"array","items":{"type":"number","maximum":480,"minimum":5}},"allowSelectChannel":{"type":"boolean","description":"Allow attendees to select meeting channel/location","example":false},"allowHostSelection":{"type":"boolean","description":"Allow attendees to select specific host (round-robin only)","example":false},"forceHostSelection":{"type":"boolean","description":"Force host selection (no \"any host\" option available)","example":false},"allowedChannels":{"uniqueItems":true,"type":"array","items":{"$ref":"#/components/schemas/MeetingTypeChannel"},"description":"Available channel options when allowSelectChannel is enabled","example":["zoom","google"]},"allowAddingGuests":{"type":"boolean","description":"Allow attendees to invite additional guests","example":false},"doubleOptIn":{"description":"Double opt-in confirmation setting","example":"useCompanySettings","allOf":[{"$ref":"#/components/schemas/MeetingTypeDoubleOptInSetting"}]},"requireHostConfirmation":{"description":"Require host confirmation for bookings","example":"useCompanySettings","allOf":[{"$ref":"#/components/schemas/MeetingTypeDoubleOptInSetting"}]},"enableClusterMeeting":{"type":"boolean","description":"Show only time slots adjacent to existing meetings","example":false},"enableBufferCarryOver":{"type":"boolean","description":"Carry over buffer time to next available slot if needed","example":false},"maxBufferCarryOverDelay":{"type":"number","minimum":0,"maximum":30,"description":"Maximum days for buffer carry-over delay","example":0},"allowPhoneOnlyBooking":{"type":"boolean","description":"Allow phone-only bookings without email (API use case, requires phoneOnlyBooking in request)","example":false},"confirmationPageCssSetting":{"description":"Custom CSS settings for confirmation pages","allOf":[{"$ref":"#/components/schemas/CssSetting"}]},"channelAvailabilities":{"type":"object","description":"Per-channel availability overrides. Each value can be a UUID string (referencing an existing availability) or an inline availability object with \"name\", \"timezone\", and optional \"schedule\" and \"exceptions\"."}}},"UpdateMeetingTypeV4Dto":{"type":"object","properties":{"meetingInfo":{"description":"Meeting information to update","allOf":[{"$ref":"#/components/schemas/UpdateMeetingInfoDto"}]},"meetingOptions":{"description":"Meeting options to update","allOf":[{"$ref":"#/components/schemas/UpdateMeetingOptionsDto"}]},"enabled":{"type":"boolean","description":"Enable or disable the meeting type","example":true},"slug":{"type":"string","description":"Slug for the meeting type URL","example":"discovery-call"},"timeslotInterval":{"type":"number","minimum":5,"maximum":60,"description":"Timeslot interval in minutes","example":15},"spots":{"type":"number","minimum":1,"maximum":100,"description":"Number of spots available per timeslot","example":1},"bookingMinimum":{"type":"number","minimum":0,"maximum":10080,"description":"Minimum booking notice in minutes","example":60},"daysIntoFuture":{"description":"Date range settings for future bookings","allOf":[{"$ref":"#/components/schemas/UpdateDaysIntoFutureDto"}]},"locations":{"description":"Available locations for in-person meetings","example":["Office A","Conference Room B"],"type":"array","items":{"type":"string"}},"availabilityId":{"type":"string","format":"uuid","description":"ID of an existing availability to associate with this meeting type."},"ics":{"description":"Calendar invite (ICS) settings. Customize the title, description, and location of calendar events. Each field accepts a plain string (stored under the default language) or an object with language keys.","allOf":[{"$ref":"#/components/schemas/UpdateIcsV4Dto"}]},"internalNotes":{"type":"string","nullable":true,"maxLength":5000,"description":"Internal note for organizers. Never shown to customers.","example":"pi009_Markt Tansas Offenbach_TSO \u2013 Partner: Max M\u00fcller"}}},"AvailabilityCalculationMethod":{"type":"string","enum":["everyone","anyone"]},"UnavailabilityType":{"type":"string","enum":["event","exception","googleEvent","outlookEvent","exchangeEvent","exchangeTeamsEvent","icloudEvent","caldavEvent","smartWeEvent","icsEvent","salesforceEvent","bufferBefore","bufferAfter","bookingBeforeLimit","bookingAfterLimit","perDayBookingLimit","perWeekBookingLimit","perMonthBookingLimit","perYearBookingLimit","outsideHours","clusterMeetingNotAdjacent"]},"UnavailabilityEvent":{"type":"object","properties":{"hostId":{"type":"string"},"hostName":{"type":"string"},"picture":{"type":"string"},"type":{"allOf":[{"$ref":"#/components/schemas/UnavailabilityType"}]},"title":{"type":"string"}},"required":["hostId","hostName","type"]},"Timeframe":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"},"unavailabilityEvent":{"$ref":"#/components/schemas/UnavailabilityEvent"}},"required":["start","end"]},"SpotAppointmentInfoDto":{"type":"object","properties":{"id":{"type":"string"},"totalSpots":{"type":"number"},"takenSpots":{"type":"number"}},"required":["id","totalSpots","takenSpots"]},"AvailabilitySpotDto":{"type":"object","properties":{"startTime":{"type":"string"},"unavailabilityEvents":{"default":[],"type":"array","items":{"$ref":"#/components/schemas/UnavailabilityEvent"}},"appointment":{"$ref":"#/components/schemas/SpotAppointmentInfoDto"}},"required":["startTime"]},"AvailabilityDateDto":{"type":"object","properties":{"date":{"type":"string"},"spots":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilitySpotDto"}}},"required":["date","spots"]},"BookingAvailabilityResponseDto":{"type":"object","properties":{"timezone":{"type":"string"},"timeframes":{"type":"array","items":{"$ref":"#/components/schemas/Timeframe"}},"dates":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityDateDto"}},"earliestAvailableDate":{"type":"string"},"earliestMonthAvailability":{"description":"Full availability data for the month containing earliestAvailableDate","allOf":[{"$ref":"#/components/schemas/BookingAvailabilityResponseDto"}]}},"required":["timezone","timeframes","dates"]},"UserAvailabilityResponseDto":{"type":"object","properties":{"hostId":{"type":"string"},"available":{"type":"array","items":{"$ref":"#/components/schemas/Timeframe"}},"unavailable":{"type":"array","items":{"$ref":"#/components/schemas/Timeframe"}}},"required":["hostId","available","unavailable"]},"QueueConditionOperator":{"type":"string","enum":["equals","notEqual","lessThan","greaterThan","lessThanOrEqual","moreThanOrEqual","contains","notContains","blank","notBlank","containsAny","containsNone","startsWith"]},"QueueConditionTarget":{"type":"string","enum":["attendeeEmail","attendeeFullname","attendeeFirstname","attendeeLastname","attendeePhone","attendeePolicyAccepted","attendeeReceiveReminders","attendeeLanguage","attendeeTimezone","attendeeOther","submissionScore","submissionMaxScore","submissionScorePercentage"]},"ExpressionCondition":{"type":"object","properties":{"operator":{"allOf":[{"$ref":"#/components/schemas/QueueConditionOperator"}]},"target":{"allOf":[{"$ref":"#/components/schemas/QueueConditionTarget"}]},"customTarget":{"type":"string"},"value":{"type":"string"}},"required":["operator","target","customTarget","value"]},"UpdateQueueDto":{"type":"object","properties":{"userId":{"type":"string","description":"Assign or deassign specified user"},"userCapacities":{"description":"User capacities for queue management","type":"array","items":{"$ref":"#/components/schemas/UserCapacity"}},"userPriorities":{"description":"Host priorities for round robin (higher = booked first)","type":"array","items":{"$ref":"#/components/schemas/UserPriority"}},"userCustomLinks":{"description":"Per-host overrides for the meeting type custom meeting link. Empty link falls back to the meeting type default.","type":"array","items":{"$ref":"#/components/schemas/UserCustomLink"}},"type":{"description":"Round robin queue type","allOf":[{"$ref":"#/components/schemas/QueueType"}]},"maxLeadThreshold":{"type":"number","minimum":1,"description":"Max bookings a host can be ahead before their availability is hidden"},"distributionPeriod":{"type":"string","enum":["day","week","month"],"description":"Period over which bookings are counted for equal distribution"},"prioritizeNearTermAvailability":{"type":"boolean","description":"If true, when the lead-threshold filter would push the next available slot more than 14 days past the minimum booking notice, temporarily include over-lead hosts. Disable only for strict fairness."}}},"UserCapacityDto":{"type":"object","properties":{"userId":{"type":"string"},"capacity":{"type":"number"}},"required":["userId","capacity"]},"UserCustomLinkDto":{"type":"object","properties":{"userId":{"type":"string"},"link":{"type":"string"}},"required":["userId","link"]},"RoundRobinEntryDto":{"type":"object","properties":{"id":{"type":"number"},"userId":{"type":"string","nullable":true},"groupId":{"type":"string","nullable":true},"appointmentId":{"type":"string","nullable":true},"queueId":{"type":"string"},"createdAt":{"type":"string"},"selectionReason":{"type":"string"}},"required":["id","createdAt"]},"QueueUserGroupDto":{"type":"object","properties":{"id":{"type":"string"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserBasicDto"}},"userIds":{"type":"array","items":{"type":"string"}}},"required":["id","users","userIds"]},"QueueResponseDto":{"type":"object","properties":{"id":{"type":"string"},"type":{"allOf":[{"$ref":"#/components/schemas/QueueType"}]},"workspaceId":{"type":"string"},"meetingTypeId":{"type":"string"},"companyId":{"type":"string"},"userCapacities":{"type":"array","items":{"$ref":"#/components/schemas/UserCapacityDto"}},"userCustomLinks":{"type":"array","items":{"$ref":"#/components/schemas/UserCustomLinkDto"}},"roundRobinEntries":{"type":"array","items":{"$ref":"#/components/schemas/RoundRobinEntryDto"}},"userGroups":{"type":"array","items":{"$ref":"#/components/schemas/QueueUserGroupDto"}},"userGroupIds":{"type":"array","items":{"type":"string"}},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserBasicDto"}},"userIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","type","meetingTypeId","companyId","userCapacities","userCustomLinks","roundRobinEntries","userGroups","userGroupIds","users","userIds","createdAt","updatedAt"]},"NextQueueHostsResponseDto":{"type":"object","properties":{"userIds":{"description":"Array of user IDs for the next queue hosts","type":"array","items":{"type":"string"}},"groupId":{"type":"string","description":"Optional group ID if hosts are from a specific group"}},"required":["userIds"]},"CreateUserGroupDto":{"type":"object","properties":{"queueId":{"type":"string","description":"ID of the queue this group belongs to"},"name":{"type":"string","description":"Name of the user group"}},"required":["queueId","name"]},"QueueUserGroupResponseDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"capacity":{"type":"number"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserBasicDto"}},"userIds":{"type":"array","items":{"type":"string"}},"queueId":{"type":"string"},"mainGroupHost":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/UserBasicDto"}]},"mainGroupHostId":{"type":"string","nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"deletedAt":{"type":"string","nullable":true}},"required":["id","name","capacity","users","userIds","queueId","createdAt","updatedAt"]},"UpdateUserGroupDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the user group"},"capacity":{"type":"number","description":"Group capacity (minimum 1)"},"userId":{"type":"string","description":"User to assign or deassign from group"},"mainGroupHostId":{"type":"string","nullable":true,"description":"Main host user ID for the group (can be null to remove)"}}},"CreateMeetingTypeTemplateV4Dto":{"type":"object","properties":{"meetingInfo":{"description":"Meeting information","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"meetingOptions":{"description":"Meeting options","allOf":[{"$ref":"#/components/schemas/MeetingOptions"}]},"spots":{"type":"number","description":"Number of available spots","minimum":1},"locations":{"description":"Available locations","example":["Office A","Conference Room B","Remote"],"type":"array","items":{"type":"string"}},"templateType":{"enum":["individual","team"],"type":"string","description":"Template type: individual (assigned to users) or team (assigned to workspaces)"},"queueType":{"enum":["simpleRoundRobin","advancedRoundRobin","equalDistribution"],"type":"string","description":"Queue type for team templates"}},"required":["meetingInfo","meetingOptions"]},"MeetingTypeTemplateResponseDto":{"type":"object","properties":{"id":{"type":"string"},"meetingInfo":{"$ref":"#/components/schemas/MeetingInfo"},"meetingOptions":{"$ref":"#/components/schemas/MeetingOptions"},"crmOptions":{"$ref":"#/components/schemas/MeetingCRMOptions"},"ics":{"$ref":"#/components/schemas/IcsInfo"},"timeslotInterval":{"type":"number"},"spots":{"type":"number"},"bookingMinimum":{"type":"number"},"daysIntoFuture":{"$ref":"#/components/schemas/DaysIntoFutureSetting"},"enableCalendarInviteNotification":{"type":"boolean"},"useSchedule":{"type":"boolean"},"useCompanyLogo":{"type":"boolean"},"useCustomInvite":{"type":"boolean"},"disableActionButtons":{"type":"boolean"},"useCustomForm":{"type":"boolean"},"inCompanyPage":{"type":"boolean"},"formFirst":{"type":"boolean"},"locations":{"type":"array","items":{"type":"string"}},"compact":{"type":"boolean"},"disableTeamsEmail":{"type":"boolean"},"languageSetting":{"$ref":"#/components/schemas/LanguageSetting"},"customTextSelectChannel":{"$ref":"#/components/schemas/CustomTextSelectChannelSetting"},"timezonePreset":{"$ref":"#/components/schemas/TimezonePresetSetting"},"cssSetting":{"$ref":"#/components/schemas/CssSetting"},"meetingPaymentInfo":{"$ref":"#/components/schemas/MeetingPaymentInfo"},"videoSetting":{"$ref":"#/components/schemas/VideoSetting"},"cancellationPolicy":{"$ref":"#/components/schemas/CancellationPolicySetting"},"reschedulingPolicy":{"$ref":"#/components/schemas/ReschedulingPolicySetting"},"recurringSetting":{"$ref":"#/components/schemas/RecurringSetting"},"lockedFields":{"type":"array","items":{"type":"string"}},"templateType":{"enum":["individual","team"],"type":"string"},"queueType":{"nullable":true,"enum":["simpleRoundRobin","advancedRoundRobin","equalDistribution"],"type":"string"},"useHostAvailability":{"type":"boolean"},"bookingFrequencies":{"type":"array","items":{"$ref":"#/components/schemas/HostBookingFrequency"}},"companyId":{"type":"string"},"createdById":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"deletedAt":{"type":"string"},"formId":{"type":"string"},"availabilityId":{"type":"string"},"reminderIds":{"type":"array","items":{"type":"string"}},"assignedToCount":{"type":"number"},"createdBy":{"$ref":"#/components/schemas/UserBasicDto"},"availability":{"$ref":"#/components/schemas/AvailabilityBasicDto"},"form":{"$ref":"#/components/schemas/FormBasicDto"},"reminders":{"type":"array","items":{"$ref":"#/components/schemas/ReminderBasicDto"}}},"required":["id","meetingInfo","meetingOptions","crmOptions","ics","timeslotInterval","spots","bookingMinimum","daysIntoFuture","enableCalendarInviteNotification","useSchedule","useCompanyLogo","useCustomInvite","disableActionButtons","useCustomForm","inCompanyPage","formFirst","locations","compact","disableTeamsEmail","languageSetting","customTextSelectChannel","timezonePreset","cssSetting","meetingPaymentInfo","videoSetting","cancellationPolicy","reschedulingPolicy","recurringSetting","lockedFields","templateType","useHostAvailability","bookingFrequencies","companyId","createdById","createdAt","updatedAt"]},"AssignTemplateHost":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"]},"AssignTemplateHostBulk":{"type":"object","properties":{"userIds":{"maxItems":100,"type":"array","items":{"type":"string"}}},"required":["userIds"]},"TemplateMeetingTypeInfoDto":{"type":"object","properties":{"id":{"type":"string","description":"Meeting type ID"},"meetingName":{"type":"string","description":"Meeting type name"},"userId":{"type":"string","description":"User ID of the meeting type owner"},"userName":{"type":"string","description":"Full name of the user"},"userEmail":{"type":"string","description":"Email of the user"},"userPicture":{"type":"string","description":"Profile picture URL of the user"},"enabled":{"type":"boolean","description":"Whether the meeting type is enabled"}},"required":["id","meetingName","userId","userName","userEmail","enabled"]},"AssignTemplateWorkspace":{"type":"object","properties":{"workspaceId":{"type":"string"}},"required":["workspaceId"]},"TemplateWorkspaceInfoDto":{"type":"object","properties":{"id":{"type":"string","description":"Meeting type ID"},"meetingName":{"type":"string","description":"Meeting type name"},"workspaceId":{"type":"string","description":"Workspace ID"},"workspaceName":{"type":"string","description":"Workspace name"},"workspacePicture":{"type":"string","description":"Workspace picture URL"},"enabled":{"type":"boolean","description":"Whether the meeting type is enabled"}},"required":["id","meetingName","workspaceId","workspaceName","enabled"]},"UpdateMeetingTypeTemplateV4Dto":{"type":"object","properties":{"meetingInfo":{"description":"Meeting information","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"meetingOptions":{"description":"Meeting options","allOf":[{"$ref":"#/components/schemas/MeetingOptions"}]},"spots":{"type":"number","description":"Number of available spots","minimum":1},"locations":{"description":"Available locations","example":["Office A","Conference Room B","Remote"],"type":"array","items":{"type":"string"}},"templateType":{"enum":["individual","team"],"type":"string","description":"Template type: individual (assigned to users) or team (assigned to workspaces)"},"queueType":{"enum":["simpleRoundRobin","advancedRoundRobin","equalDistribution"],"type":"string","description":"Queue type for team templates"},"lockedFields":{"description":"Field keys that assigned users cannot modify on their meeting types.","type":"array","items":{"type":"string"}}}},"ProvisionalBookingPayloadResponseDto":{"type":"object","properties":{"id":{"type":"string"},"dto":{"$ref":"#/components/schemas/BookingDto"},"type":{"enum":["doubleOptIn","requireHostConfirmation"],"type":"string"},"createdAt":{"type":"string"},"deletedAt":{"type":"string"},"queueBookingInfo":{"$ref":"#/components/schemas/NextQueueHostsSelectionReasonDto"},"hosts":{"type":"array","items":{"$ref":"#/components/schemas/UserBasicDto"}},"meetingTypeId":{"type":"string"}},"required":["id","dto","type","createdAt"]},"PaginatedProvisionalBookingsResponseDto":{"type":"object","properties":{"provisionalBookings":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionalBookingPayloadResponseDto"}},"total":{"type":"number"}},"required":["provisionalBookings","total"]},"DeclineProvisionalBookingDto":{"type":"object","properties":{"reason":{"type":"string","description":"Reason for declining the booking request"}}},"HandoffAppointmentDto":{"type":"object","properties":{"appointmentId":{"type":"string","description":"ID of the appointment to handoff"},"userId":{"type":"string","description":"ID of user to handoff appointment to"},"queueId":{"type":"string","description":"ID of queue to handoff appointment to"},"queueGroupId":{"type":"string","description":"ID of queue group to handoff appointment to"}},"required":["appointmentId"]},"HandoffBlockedReason":{"type":"string","enum":["not_available"],"description":"Reason why user is blocked from handoff (if applicable)"},"HandoffUserInfo":{"type":"object","properties":{"firstname":{"type":"string","description":"User first name"},"lastname":{"type":"string","description":"User last name"},"picture":{"type":"string","description":"User profile picture URL"},"id":{"type":"string","description":"User ID"},"blocked":{"description":"Reason why user is blocked from handoff (if applicable)","allOf":[{"$ref":"#/components/schemas/HandoffBlockedReason"}]}},"required":["firstname","lastname","id"]},"HandoffScope":{"type":"string","enum":["workspace","company"],"description":"Whether the list is limited to the appointment workspace or spans the company"},"AvailableHandoffsDto":{"type":"object","properties":{"users":{"description":"List of available users for handoff","type":"array","items":{"$ref":"#/components/schemas/HandoffUserInfo"}},"scope":{"description":"Whether the list is limited to the appointment workspace or spans the company","allOf":[{"$ref":"#/components/schemas/HandoffScope"}]}},"required":["users","scope"]},"BulkHandoffDto":{"type":"object","properties":{"userId":{"description":"Array of user IDs to handoff appointments from","type":"array","items":{"type":"string","format":"uuid"}},"start":{"type":"string","description":"Period start date in ISO format"},"end":{"type":"string","description":"Period end date in ISO format"},"targetUserId":{"type":"string","description":"Target user ID to handoff appointments to","format":"uuid"},"enableAvailabilityCheck":{"type":"boolean","description":"Enable availability check during handoff"},"targetUserIds":{"description":"Array of target user IDs to distribute appointments across (round-robin)","type":"array","items":{"type":"string","format":"uuid"}},"appointmentIds":{"description":"Specific appointment IDs to handoff (cherry-pick). If not provided, all matching appointments are included.","type":"array","items":{"type":"string","format":"uuid"}},"ignoreAvailability":{"type":"boolean","description":"If true, ignore availability conflicts and force handoff all appointments"}},"required":["userId","start","end"]},"BulkHandoffResponseDto":{"type":"object","properties":{"success":{"description":"Array of appointment IDs that were successfully handed off","type":"array","items":{"type":"string"}},"conflicts":{"description":"Array of appointment IDs that could not be handed off due to conflicts","type":"array","items":{"type":"string"}}},"required":["success"]},"CreateGroupBookingLinkDto":{"type":"object","properties":{"workspaceId":{"type":"string"},"meetingTypeId":{"type":"string"},"hostIds":{"type":"array","items":{"type":"string"}}},"required":["workspaceId","meetingTypeId","hostIds"]},"GroupBookingLinkResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the group booking link"},"workspaceId":{"type":"string","description":"ID of the workspace this group booking link belongs to"},"companyId":{"type":"string","description":"ID of the company this group booking link belongs to"},"hostIds":{"description":"Array of host user IDs for this group booking link","type":"array","items":{"type":"string"}},"meetingTypeId":{"type":"string","description":"ID of the meeting type associated with this group booking link"},"createdAt":{"type":"string","description":"Date and time when the group booking link was created"},"updatedAt":{"type":"string","description":"Date and time when the group booking link was last updated"},"deletedAt":{"type":"string","description":"Date and time when the group booking link was soft deleted"}},"required":["id","workspaceId","companyId","hostIds","meetingTypeId","createdAt","updatedAt"]},"UpdateGroupBookingLinkDto":{"type":"object","properties":{"meetingTypeId":{"type":"string"},"hostIds":{"type":"array","items":{"type":"string"}}}},"PersonalBookingLinkResponseDto":{"type":"object","properties":{"link":{"type":"string","description":"The booking link URL"},"meetingTypeId":{"type":"string","description":"ID of the associated meeting type"},"fullName":{"type":"string","description":"Full name of the user"},"picture":{"type":"string","description":"Profile picture URL"},"slug":{"type":"string","description":"User slug"},"title":{"type":"string","description":"User title or job position"},"id":{"type":"string","description":"User ID"},"email":{"type":"string","description":"User email address"}},"required":["link"]},"IndividualBookingLinkResponseDto":{"type":"object","properties":{"userId":{"type":"string","description":"ID of the user associated with this booking link"},"firstname":{"type":"string","description":"First name of the user"},"lastname":{"type":"string","description":"Last name of the user"},"picture":{"type":"string","description":"Profile picture URL of the user"},"link":{"type":"string","description":"The booking link URL"}},"required":["userId","firstname","lastname","link"]},"MeetingTypeLinksResponseDto":{"type":"object","properties":{"meetingTypeId":{"type":"string","description":"ID of the meeting type"},"links":{"description":"Array of individual booking links for this meeting type","type":"array","items":{"$ref":"#/components/schemas/IndividualBookingLinkResponseDto"}}},"required":["meetingTypeId","links"]},"WorkspaceBookingLinksResponseDto":{"type":"object","properties":{"workspaceId":{"type":"string","description":"ID of the workspace"},"meetingTypesLinks":{"description":"Array of meeting type links for this workspace","type":"array","items":{"$ref":"#/components/schemas/MeetingTypeLinksResponseDto"}}},"required":["workspaceId","meetingTypesLinks"]},"GetBookingLinksResponseDto":{"type":"object","properties":{"personalLinks":{"description":"Array of personal booking links","type":"array","items":{"$ref":"#/components/schemas/PersonalBookingLinkResponseDto"}},"workspaceLinks":{"description":"Array of workspace booking links","type":"array","items":{"$ref":"#/components/schemas/WorkspaceBookingLinksResponseDto"}}},"required":["personalLinks","workspaceLinks"]},"BookingLinkResponseDto":{"type":"object","properties":{"link":{"type":"string","description":"The booking link URL"},"meetingTypeId":{"type":"string","description":"ID of the meeting type associated with this booking link"}},"required":["link","meetingTypeId"]},"CompanyPageUser":{"type":"object","properties":{"id":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"title":{"type":"string"},"picture":{"type":"string"}},"required":["id","firstname","lastname"]},"ExtendedMeetingTypeResponseDto":{"type":"object","properties":{"meetingType":{"description":"Meeting type information","allOf":[{"$ref":"#/components/schemas/MeetingTypeResponseDto"}]},"link":{"type":"string","description":"Booking link for this meeting type"}},"required":["meetingType","link"]},"CompanyBookingPageResponseDto":{"type":"object","properties":{"user":{"description":"User information","allOf":[{"$ref":"#/components/schemas/CompanyPageUser"}]},"publicCompanyInfo":{"description":"Public company information","allOf":[{"$ref":"#/components/schemas/PublicCompanyInfo"}]},"meetingTypes":{"description":"Array of meeting types with their booking links","type":"array","items":{"$ref":"#/components/schemas/ExtendedMeetingTypeResponseDto"}}},"required":["user","publicCompanyInfo","meetingTypes"]},"PersonalPageWithoutMeetingTypes":{"type":"object","properties":{"useCustomColors":{"type":"boolean"},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"headerImage":{"type":"string","nullable":true},"description":{"type":"string"},"onlineProfiles":{"$ref":"#/components/schemas/OnlineProfiles"},"showAllMeetingTypes":{"type":"boolean","description":"If true, show all user meeting types on business card. If false, show only selected meeting types.","default":true},"meetingTypeOrder":{"type":"array","items":{"type":"string"}}},"required":["useCustomColors","primaryColor","secondaryColor","headerImage","description","onlineProfiles","showAllMeetingTypes"]},"PersonalPageUserV4":{"type":"object","properties":{"id":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string","nullable":true},"title":{"type":"string"},"picture":{"type":"string"},"personalPage":{"$ref":"#/components/schemas/PersonalPageWithoutMeetingTypes"}},"required":["id","firstname","lastname","personalPage"]},"PersonalBookingPageResponseDto":{"type":"object","properties":{"user":{"description":"User information","allOf":[{"$ref":"#/components/schemas/PersonalPageUserV4"}]},"company":{"description":"Company information","allOf":[{"$ref":"#/components/schemas/PublicCompanyInfo"}]},"meetingTypes":{"description":"Array of meeting types with their booking links","type":"array","items":{"$ref":"#/components/schemas/ExtendedMeetingTypeResponseDto"}}},"required":["user","company","meetingTypes"]},"BookingResponseDto":{"type":"object","properties":{"appointmentId":{"type":"string","description":"ID of appointment. Undefined if DOI flow and not confirmed yet."},"secret":{"type":"string"},"attendeeEmail":{"type":"string"},"bookingType":{"description":"Only defined if DOI flow is enabled. If undefined, its a normal booking","enum":["doubleOptIn","requireHostConfirmation"],"type":"string"},"provisionalBookingId":{"type":"string","description":"ID of provsionalBooking. Undefined if its a normal booking."},"redirectUrl":{"type":"string","description":"Redirect URL to navigate to after booking (with any variables replaced).\nOnly set if meeting type has redirect enabled and a URL is configured.\nThis is the single source of truth for redirects."},"recurringSeriesId":{"type":"string","description":"ID of the recurring series if this is a recurring booking.\nUndefined for non-recurring bookings."},"recurringOccurrences":{"type":"number","description":"Total number of occurrences booked if this is a recurring booking.\nUndefined for non-recurring bookings."},"appointmentIds":{"description":"IDs of all appointments created in this recurring booking.\nUndefined for non-recurring bookings.","type":"array","items":{"type":"string"}},"bundleId":{"type":"string","description":"ID of the bundle if this is a bundle booking.\nUndefined for non-bundle bookings."},"isBundleBooking":{"type":"boolean","description":"Whether this is a bundle booking."}}},"QuickMailDto":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The unique identifier of the attendee to send email to"},"title":{"type":"string","description":"Email subject line"},"content":{"type":"string","description":"Email message content/body"}},"required":["attendeeId","title","content"]},"PublicAppointmentHost":{"type":"object","properties":{"id":{"type":"string","description":"Host user unique identifier"},"firstname":{"type":"string","description":"Host first name"},"lastname":{"type":"string","description":"Host last name"},"picture":{"type":"string","description":"Host profile picture URL"},"emailVerified":{"type":"boolean","description":"Whether the host has verified their email"}},"required":["id","firstname","lastname","emailVerified"]},"RecurringSeriesAppointment":{"type":"object","properties":{"id":{"type":"string","description":"Appointment ID"},"start":{"type":"string","description":"Appointment start time (ISO string)"},"end":{"type":"string","description":"Appointment end time (ISO string)"},"isCancelled":{"type":"boolean","description":"Whether the appointment has been cancelled"},"occurrenceNumber":{"type":"number","description":"1-based index in the recurring series"},"secret":{"type":"string","description":"Secret for this appointment - only included when caller is authenticated"}},"required":["id","start","end","isCancelled","occurrenceNumber"]},"PublicRecurringSeries":{"type":"object","properties":{"id":{"type":"string","description":"Series ID"},"mode":{"enum":["recurring","multi_slot"],"type":"string","description":"Mode of the series (recurring or multi_slot)"},"frequency":{"nullable":true,"enum":["weekly","biweekly","monthly"],"type":"string","description":"Frequency of the series (only for recurring mode)"},"totalOccurrences":{"type":"number","description":"Total number of occurrences in this series"},"appointments":{"description":"All appointments in this series","type":"array","items":{"$ref":"#/components/schemas/RecurringSeriesAppointment"}}},"required":["id","mode","totalOccurrences","appointments"]},"PublicBundleItem":{"type":"object","properties":{"meetingTypeId":{"type":"string","description":"Meeting type ID"},"meetingTypeName":{"type":"string","description":"Meeting type name"},"duration":{"type":"number","description":"Duration in minutes"},"price":{"type":"number","description":"Price"},"startTime":{"type":"string","description":"Start time of this segment (ISO string)"},"endTime":{"type":"string","description":"End time of this segment (ISO string)"},"sortOrder":{"type":"number","description":"Order in the bundle"},"hosts":{"description":"Hosts for this segment","type":"array","items":{"$ref":"#/components/schemas/PublicAppointmentHost"}}},"required":["meetingTypeId","meetingTypeName","duration","startTime","endTime","sortOrder","hosts"]},"PublicAppointment":{"type":"object","properties":{"id":{"type":"string","description":"Appointment unique identifier"},"meetingTypeId":{"type":"string","description":"Meeting type ID associated with this appointment"},"meetingInfo":{"description":"Meeting information including title, duration, and other details","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"online":{"type":"boolean","description":"Whether the appointment is conducted online"},"start":{"type":"string","description":"Appointment start time (ISO string)"},"end":{"type":"string","description":"Appointment end time (ISO string)"},"isCancelled":{"type":"boolean","description":"Whether the appointment has been cancelled"},"location":{"type":"string","description":"Physical location address"},"channel":{"description":"Meeting channel type (e.g., video conference platform)","allOf":[{"$ref":"#/components/schemas/MeetingTypeChannel"}]},"hosts":{"description":"List of appointment hosts with basic information","allOf":[{"$ref":"#/components/schemas/PublicAppointmentHost"}]},"company":{"description":"Public company information","allOf":[{"$ref":"#/components/schemas/PublicCompanyInfo"}]},"disableActionButtons":{"type":"boolean","description":"Whether action buttons (reschedule, cancel) are disabled for this appointment"},"cancellationPolicy":{"description":"Cancellation policy for this appointment","allOf":[{"$ref":"#/components/schemas/CancellationPolicySetting"}]},"reschedulingPolicy":{"description":"Rescheduling policy for this appointment","allOf":[{"$ref":"#/components/schemas/ReschedulingPolicySetting"}]},"language":{"type":"string","description":"Attendee's resolved language for this booking"},"meetingLink":{"type":"string","description":"Meeting link - only provided with proper authentication"},"ics":{"type":"string","description":"ICS calendar file content - only provided with proper authentication"},"customCss":{"type":"string","description":"Custom CSS styling for the appointment page"},"showConfetti":{"type":"boolean","description":"Whether to show confetti animation on the confirmation page"},"enableWithdrawalButton":{"type":"boolean","description":"Whether to show the withdrawal button (\"Widerrufsbutton\") on the confirmation page. Off by default; required from 19 June 2026 (\u00a7 356a BGB) for B2C distance contracts with a right of withdrawal."},"createdAt":{"type":"string","description":"When the appointment was booked (contract conclusion). The 14-day statutory withdrawal window runs from this timestamp."},"queueId":{"type":"string","description":"Queue ID - required for rescheduling on round robin meetings"},"recurringSeriesId":{"type":"string","description":"Recurring series ID if this appointment is part of a recurring series"},"occurrenceNumber":{"type":"number","description":"1-based index of this appointment within the recurring series"},"recurringSeries":{"description":"Recurring series information if this appointment is part of a recurring series","allOf":[{"$ref":"#/components/schemas/PublicRecurringSeries"}]},"isBundleBooking":{"type":"boolean","description":"Whether this appointment was booked as part of a bundle"},"bundleId":{"type":"string","description":"Bundle ID if this is a bundle booking"},"bundleItems":{"description":"Bundle items if this is a bundle booking","type":"array","items":{"$ref":"#/components/schemas/PublicBundleItem"}}},"required":["id","meetingInfo","online","start","end","isCancelled","channel","hosts","company","disableActionButtons","language","showConfetti","enableWithdrawalButton","createdAt"]},"AppointmentSortBy":{"type":"string","enum":["appointment.start","appointment.createdAt"]},"SortDirection":{"type":"string","enum":["ASC","DESC"]},"AppointmentCalendarSync":{"type":"object","properties":{"id":{"type":"string","description":"Calendar connection id"},"type":{"type":"string","description":"Calendar connection type. Google, Outlook, etc."},"hostId":{"type":"string","description":"User id of the host"},"eventId":{"type":"string","description":"Id of the external event that is created on the calendar."},"calendarId":{"type":"string","description":"Id of the external calendar on which the event is created."}},"required":["id","type","hostId","eventId","calendarId"]},"HostingInfoResponseDto":{"type":"object","properties":{"mainHost":{"type":"string","nullable":true,"description":"Main host user ID"},"meetingLink":{"type":"string","nullable":true,"description":"Meeting link for the appointment"},"googleEventId":{"type":"string","nullable":true,"description":"Google Calendar event ID"},"googleConnectionSub":{"type":"string","nullable":true,"description":"Google connection subject"},"calendarConnectionId":{"type":"string","description":"Calendar connection ID for external calendars"},"zoomMeetingId":{"type":"number","nullable":true,"description":"Zoom meeting ID"},"connectChannelId":{"type":"string","description":"Connect channel ID for external integrations"},"wherebyMeetingId":{"type":"string","nullable":true,"description":"Whereby meeting ID"},"calendarSyncProviders":{"nullable":true,"description":"Calendar sync provider configurations","allOf":[{"$ref":"#/components/schemas/AppointmentCalendarSync"}]}}},"BookingActionInfoResponseDto":{"type":"object","properties":{"actionAt":{"type":"string","description":"Timestamp when the action occurred"},"actionBy":{"type":"string","nullable":true,"description":"User ID who performed the action"},"actionSource":{"nullable":true,"description":"Source of the booking action (Host, Attendee, Company)","allOf":[{"$ref":"#/components/schemas/BookingActionSource"}]},"reason":{"type":"string","description":"Reason for the action (e.g., cancellation reason)"}},"required":["actionSource"]},"AttendeeBasicDto":{"type":"object","properties":{"id":{"type":"string","description":"Attendee ID"},"secret":{"type":"string","description":"Attendee secret for authentication"},"email":{"type":"string","description":"Attendee email address"},"fullname":{"type":"string","description":"Attendee full name"},"firstname":{"type":"string","description":"Attendee first name"},"lastname":{"type":"string","description":"Attendee last name"},"bringalongEmails":{"description":"Additional attendee emails (bring-along)","type":"array","items":{"type":"string"}},"notes":{"type":"object","additionalProperties":{"type":"string"},"description":"Attendee notes as key-value pairs"},"receiveReminders":{"type":"boolean","description":"Whether attendee receives reminders"},"phone":{"type":"string","description":"Attendee phone number"},"language":{"type":"string","description":"Attendee preferred language"},"timezone":{"type":"string","description":"Attendee timezone"},"noShow":{"type":"boolean","description":"Whether attendee was a no-show"},"dataPolicyAccepted":{"type":"boolean","description":"Whether data policy was accepted"},"doubleOptIn":{"type":"string","description":"Double opt-in confirmation timestamp"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"deletedAt":{"type":"string","description":"Soft deletion timestamp"}},"required":["id","secret","bringalongEmails","notes","receiveReminders","language","timezone","noShow","dataPolicyAccepted","createdAt","updatedAt"]},"ResolvableErrorBasicDto":{"type":"object","properties":{"errorCode":{"type":"string","description":"Error code identifying the type of error"}},"required":["errorCode"]},"AppointmentResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Appointment ID"},"secret":{"type":"string","description":"Secret key for appointment authentication"},"ics":{"type":"string","description":"ICS calendar data"},"meetingInfo":{"description":"Meeting information including title, duration, etc.","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"hostingInfo":{"description":"Hosting information including links and integration IDs","allOf":[{"$ref":"#/components/schemas/HostingInfoResponseDto"}]},"cancel":{"description":"Cancellation information","allOf":[{"$ref":"#/components/schemas/BookingActionInfoResponseDto"}]},"crmOptions":{"description":"CRM integration options","allOf":[{"$ref":"#/components/schemas/MeetingCRMOptions"}]},"start":{"type":"string","description":"Appointment start time (ISO string)"},"end":{"type":"string","description":"Appointment end time (ISO string)"},"isCancelled":{"type":"boolean","description":"Whether the appointment is cancelled"},"rescheduledAt":{"type":"string","description":"When the appointment was rescheduled"},"location":{"type":"string","description":"Meeting location"},"attendees":{"description":"Appointment attendees without relation properties","type":"array","items":{"$ref":"#/components/schemas/AttendeeBasicDto"}},"attendeeIds":{"description":"Array of attendee IDs","type":"array","items":{"type":"string"}},"roundRobinEntries":{"description":"Round robin entries for this appointment","type":"array","items":{"$ref":"#/components/schemas/RoundRobinEntryDto"}},"meetingTypeId":{"type":"string","description":"Meeting type ID"},"hostIds":{"description":"Array of host user IDs","type":"array","items":{"type":"string"}},"scheduledReminderIds":{"description":"Array of scheduled reminder IDs","type":"array","items":{"type":"string"}},"companyId":{"type":"string","description":"Company ID this appointment belongs to"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"deletedAt":{"type":"string","description":"Soft deletion timestamp"},"resolvableErrors":{"description":"Appointment resolvable errors (error codes only)","type":"array","items":{"$ref":"#/components/schemas/ResolvableErrorBasicDto"}},"paymentId":{"type":"string","description":"Payment ID if this is a paid appointment"},"note":{"type":"string","description":"Appointment note"},"transcription":{"type":"string","nullable":true,"description":"Full meeting transcription in markdown format"},"summary":{"type":"string","nullable":true,"description":"AI-generated summary of the meeting in markdown format"}},"required":["id","secret","ics","meetingInfo","hostingInfo","cancel","crmOptions","start","end","isCancelled","attendees","attendeeIds","roundRobinEntries","meetingTypeId","hostIds","scheduledReminderIds","companyId","createdAt","updatedAt","resolvableErrors"]},"PaginatedAppointmentsResponseDto":{"type":"object","properties":{"appointments":{"description":"Array of appointments for the current page","type":"array","items":{"$ref":"#/components/schemas/AppointmentResponseDto"}},"total":{"type":"number","description":"Total number of appointments matching the criteria"}},"required":["appointments","total"]},"AddGuestEmailsDto":{"type":"object","properties":{"attendeeId":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["attendeeId","email"]},"RemoveGuestEmailDto":{"type":"object","properties":{"attendeeId":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["attendeeId","email"]},"UpdateNotesDto":{"type":"object","properties":{"note":{"type":"string"}},"required":["note"]},"UpdateTranscriptionDto":{"type":"object","properties":{"transcription":{"type":"string","nullable":true,"description":"Full meeting transcription in markdown format. Set to null to clear."},"summary":{"type":"string","nullable":true,"description":"AI-generated summary of the meeting in markdown format. Set to null to clear."}}},"CancelAppointmentDto":{"type":"object","properties":{"reason":{"type":"string","maxLength":500,"description":"Reason for cancellation. Included in notification emails sent to participants.","example":"Schedule conflict"},"attendeeId":{"type":"string","format":"uuid","description":"For group bookings: the ID of the attendee to remove. The appointment continues for remaining attendees. If omitted on a group booking, `cancelAll` must be set to `true`."},"cancelAll":{"type":"boolean","description":"Required for group bookings when `attendeeId` is not provided. Confirms intent to cancel the entire group appointment for all attendees. Ignored for non-group bookings.","default":false},"cancelEntireSeries":{"type":"boolean","description":"If `true` and the appointment is part of a recurring series, cancels all future occurrences in addition to this one. Defaults to `false`.","default":false}}},"RescheduleAppointmentDto":{"type":"object","properties":{"start":{"type":"string","description":"New start time for the appointment in ISO 8601 format. The duration remains unchanged.","example":"2026-03-10T14:00:00.000Z"},"ignoreAvailability":{"type":"boolean","description":"Skip availability and conflict checks. Allows scheduling outside available hours or on top of existing appointments. Defaults to `false`.","default":false}},"required":["start"]},"RescheduleResponseDto":{"type":"object","properties":{"appointment":{"description":"The rescheduled appointment with updated start and end times","allOf":[{"$ref":"#/components/schemas/AppointmentResponseDto"}]},"previousStart":{"type":"string","description":"The previous start time before rescheduling (ISO 8601)","example":"2026-03-08T10:00:00.000Z"}},"required":["appointment","previousStart"]},"CreateAttendeePendingDto":{"type":"object","properties":{"email":{"type":"string","description":"Attendee email address. Required for all standard bookings.\nOptional only when `BookingDto.phoneOnlyBooking` is true.\nValidated as email format when provided.","format":"email"},"firstname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"lastname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"fullname":{"type":"string","description":"Either fullname or firstname/lastname is required","maxLength":150},"bringalongEmails":{"description":"Additional attendee emails (max 5)","maxItems":5,"type":"array","items":{"type":"string","format":"email"}},"notes":{"type":"object","description":"An object containing attendee form entries.","additionalProperties":{"type":"string"}},"phone":{"type":"string"},"language":{"allOf":[{"$ref":"#/components/schemas/Language"}]},"timezone":{"type":"string"},"dataPolicyAccepted":{"type":"boolean"},"companyId":{"type":"string","format":"uuid"}},"required":["notes","companyId"]},"AttendeePendingResponseDto":{"type":"object","properties":{"id":{"type":"number","description":"Pending attendee ID"},"companyId":{"type":"string","description":"Company ID that the pending attendee was booking"},"email":{"type":"string","description":"Attendee email address"},"fullname":{"type":"string","description":"Attendee full name"},"firstname":{"type":"string","description":"Attendee first name"},"lastname":{"type":"string","description":"Attendee last name"},"bringalongEmails":{"description":"Additional attendee emails (bring-along)","type":"array","items":{"type":"string"}},"notes":{"type":"object","additionalProperties":{"type":"string"},"description":"Attendee notes as key-value pairs"},"phone":{"type":"string","description":"Attendee phone number"},"language":{"type":"string","description":"Attendee preferred language"},"timezone":{"type":"string","description":"Attendee timezone"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"deletedAt":{"type":"string","description":"Soft deletion timestamp"}},"required":["id","companyId","email","bringalongEmails","notes","phone","language","timezone","createdAt","updatedAt"]},"MeetingTypeBasicResponseDto":{"type":"object","properties":{"meetingInfo":{"description":"Meeting information (title, description, duration, etc.)","allOf":[{"$ref":"#/components/schemas/MeetingInfo"}]},"spots":{"type":"number","description":"Number of available spots for the meeting"},"enabled":{"type":"boolean","description":"Whether the meeting type is enabled"},"slug":{"type":"string","description":"Meeting type unique slug"},"formId":{"type":"string","description":"Form ID associated with the meeting type"},"communicationSettingsId":{"type":"number","nullable":true,"description":"Communication settings ID"},"availabilityId":{"type":"string","description":"Availability ID associated with the meeting type"},"companyId":{"type":"string","description":"Company ID that owns this meeting type"},"queueId":{"type":"string","description":"Queue ID if meeting type uses a queue"},"locations":{"description":"Available meeting locations","type":"array","items":{"type":"string"}},"workspaceId":{"type":"string","description":"Workspace ID if meeting type belongs to a workspace"},"isGlobalQueue":{"type":"boolean","description":"Whether this meeting type uses a global queue"},"userId":{"type":"string","description":"User ID who owns this meeting type"},"createdById":{"type":"string","description":"User ID who created this meeting type"},"createdAt":{"type":"string","description":"Creation timestamp"},"deletedAt":{"type":"string","description":"Deletion timestamp if soft deleted"},"resourceChannelIds":{"description":"IDs of resource channels associated with this meeting type","type":"array","items":{"type":"string"}}},"required":["meetingInfo","spots","enabled","slug","companyId","locations","isGlobalQueue","createdById","createdAt"]},"PersonalPageResponseDto":{"type":"object","properties":{"useCustomColors":{"type":"boolean","description":"Whether custom colors are enabled for the personal page"},"primaryColor":{"type":"string","description":"Primary color for the personal page theme"},"secondaryColor":{"type":"string","description":"Secondary color for the personal page theme"},"headerImage":{"type":"string","nullable":true,"description":"Header image URL for the personal page"},"description":{"type":"string","description":"Personal page description text"},"onlineProfiles":{"description":"Online profiles and social media links","allOf":[{"$ref":"#/components/schemas/OnlineProfiles"}]},"meetingTypes":{"description":"Meeting types assigned to this personal page","type":"array","items":{"$ref":"#/components/schemas/MeetingTypeBasicResponseDto"}}},"required":["useCustomColors","primaryColor","secondaryColor","description","onlineProfiles"]},"UpdateOnlineProfilesDto":{"type":"object","properties":{"linkedIn":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"instagram":{"type":"string"},"xing":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"customLinks":{"type":"array","items":{"$ref":"#/components/schemas/CustomLink"}},"addressStreet":{"type":"string"},"addressCity":{"type":"string"},"addressPostalCode":{"type":"string"},"addressCountry":{"type":"string"}}},"UpdatePersonalPageDto":{"type":"object","properties":{"useCustomColors":{"type":"boolean"},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"headerImage":{"type":"string","nullable":true},"description":{"type":"string"},"showAllMeetingTypes":{"type":"boolean","description":"If true, show all user meeting types on business card. If false, show only selected meeting types.","default":true},"meetingTypeOrder":{"type":"array","items":{"type":"string"}},"onlineProfiles":{"$ref":"#/components/schemas/UpdateOnlineProfilesDto"}}},"CreateAvailabilityOptionDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the availability. Defaults to \"{givenName}'s Default Availability\""},"schedule":{"description":"Weekly schedule for availability. Defaults to business hours (9-17 Mon-Fri)","allOf":[{"$ref":"#/components/schemas/WeeklySchedule"}]},"timezone":{"type":"string","description":"Timezone for the availability. Inherits from user timezone if not specified"}}},"CreateMeetingTypeOptionDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the meeting type. Defaults to \"30min Meeting\""},"duration":{"type":"number","minimum":1,"description":"Duration of the meeting in minutes. Defaults to 30"},"slug":{"type":"string","description":"URL slug for the meeting type. Auto-generated if not provided","minLength":3},"daysIntoFuture":{"description":"Date range restrictions for booking availability. Controls when meetings can be booked (limit/range/forever modes)","allOf":[{"$ref":"#/components/schemas/DaysIntoFutureSetting"}]},"channel":{"enum":["local","local-attendee","google","zoom","phone","phone-incoming","whatsapp","connect","webex","skypeForConsumer","skypeForBusiness","teamsForBusiness","teamsForBusiness2","teamsForExchange","teams2ForExchange","custom","resource","whereby","kmeet","zava","jitsi","nextcloudTalk","openTalk"],"type":"string","description":"Meeting channel/venue type. Defaults to \"phone\" (outgoing call)"}}},"CreatePlatformUserDto":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The email address of the user"},"givenName":{"type":"string","description":"The first name of the user. Defaults to the email prefix"},"familyName":{"type":"string","description":"The last name of the user. Defaults to empty string"},"slug":{"type":"string","minLength":5,"description":"Optional unique slug for the user (minimum 5 characters). Defaults to creating slug via the email."},"timezone":{"type":"string","description":"User timezone. Defaults to \"Europe/Berlin\"","example":"America/New_York"},"availability":{"description":"Availability configuration. Creates default availability if not specified","allOf":[{"$ref":"#/components/schemas/CreateAvailabilityOptionDto"}]},"meetingType":{"description":"Meeting type configuration. Creates default meeting type if not specified","allOf":[{"$ref":"#/components/schemas/CreateMeetingTypeOptionDto"}]}},"required":["email"]},"CreatePlatformUserResponseDto":{"type":"object","properties":{"userId":{"type":"string","description":"Unique ID of the created platform user","example":"550e8400-e29b-41d4-a716-446655440000"},"availabilityId":{"type":"string","description":"ID of the created availability schedule","example":"660e8400-e29b-41d4-a716-446655440001"},"meetingTypeId":{"type":"string","description":"ID of the created meeting type","example":"770e8400-e29b-41d4-a716-446655440002"},"bookingUrl":{"type":"string","description":"Public URL where customers can book appointments","example":"https://book.customdomain.com/john-doe/30min-meeting"},"companyId":{"type":"string","description":"ID of the company this user belongs to","example":"880e8400-e29b-41d4-a716-446655440003"}},"required":["userId","availabilityId","meetingTypeId","bookingUrl","companyId"]},"UserType":{"type":"string","enum":["standard","resource","api-platform","partner"]},"CompanyBasicDto":{"type":"object","properties":{"id":{"type":"string","description":"Company unique identifier"},"name":{"type":"string","description":"Company name"},"slug":{"type":"string","description":"Company unique slug"},"logo":{"type":"string","description":"Company logo URL"},"description":{"type":"string","description":"Company description"},"timezone":{"type":"string","description":"Company timezone"},"language":{"type":"string","description":"Company language"}},"required":["id","name","slug","timezone","language"]},"UserResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"User unique identifier"},"companyId":{"type":"string","nullable":true,"description":"Company ID the user belongs to"},"email":{"type":"string","description":"User email address"},"isAdmin":{"type":"boolean","description":"Whether user is a company administrator"},"isScimDisabled":{"type":"boolean","description":"Whether user is disabled via SCIM"},"familyName":{"type":"string","description":"User family name/lastname"},"givenName":{"type":"string","description":"User given name/firstname"},"picture":{"type":"string","description":"URL to user profile picture"},"createdAt":{"type":"string","description":"User creation timestamp"},"updatedAt":{"type":"string","description":"User last update timestamp"},"deletedAt":{"type":"string","nullable":true,"description":"User deletion timestamp"},"title":{"type":"string","description":"User job title"},"anonymousBooking":{"type":"boolean","description":"Whether user allows anonymous booking"},"anonymousCalendarActivity":{"type":"boolean","description":"Whether user allows anonymous calendar activity"},"slug":{"type":"string","description":"User unique slug for public URLs"},"showGettingStartedList":{"type":"boolean","description":"Whether to show getting started list"},"recieveEmailMarketing":{"type":"boolean","description":"Whether user receives marketing emails"},"timezone":{"type":"string","description":"User timezone"},"language":{"description":"User preferred language","allOf":[{"$ref":"#/components/schemas/Language"}]},"referralId":{"type":"string","description":"Referral ID if user was referred"},"personalPage":{"description":"User personal page configuration","allOf":[{"$ref":"#/components/schemas/PersonalPageResponseDto"}]},"calendarSyncProviders":{"nullable":true,"description":"Calendar sync provider settings","allOf":[{"$ref":"#/components/schemas/CalendarSync"}]},"defaultAvailabilityId":{"type":"string","description":"Default availability ID"},"aircallUserId":{"type":"string","description":"Aircall user ID"},"phone":{"type":"string","description":"User phone number"},"userType":{"description":"Type of user (standard, resource, api-platform)","allOf":[{"$ref":"#/components/schemas/UserType"}]},"wherebyApiKey":{"type":"string","nullable":true,"description":"Whereby API key"},"fullName":{"type":"string","description":"User full name (computed)"},"groupIds":{"description":"IDs of groups the user belongs to","type":"array","items":{"type":"string"}},"groupAdminIds":{"description":"IDs of groups the user is admin of","type":"array","items":{"type":"string"}},"meetingTypeIds":{"description":"IDs of meeting types owned by the user","type":"array","items":{"type":"string"}},"meetingTypeTemplateIds":{"description":"IDs of meeting type templates created by the user","type":"array","items":{"type":"string"}},"appointmentIds":{"description":"IDs of appointments where user is a host","type":"array","items":{"type":"string"}},"workspaceIds":{"description":"IDs of workspaces the user belongs to","type":"array","items":{"type":"string"}},"reminderIds":{"description":"IDs of reminders owned by the user","type":"array","items":{"type":"string"}},"formIds":{"description":"IDs of forms owned by the user","type":"array","items":{"type":"string"}},"dealIds":{"description":"IDs of deals owned by the user","type":"array","items":{"type":"string"}},"queueIds":{"description":"IDs of queues the user belongs to","type":"array","items":{"type":"string"}},"queueUserGroupIds":{"description":"IDs of queue user groups the user belongs to","type":"array","items":{"type":"string"}},"availabilityIds":{"description":"IDs of availabilities owned by the user","type":"array","items":{"type":"string"}},"company":{"description":"Company basic information","allOf":[{"$ref":"#/components/schemas/CompanyBasicDto"}]}},"required":["id","isAdmin","isScimDisabled","familyName","givenName","createdAt","updatedAt","title","anonymousBooking","anonymousCalendarActivity","slug","showGettingStartedList","recieveEmailMarketing","timezone","language","personalPage","userType","fullName"]},"ListUsersResponseDto":{"type":"object","properties":{"users":{"description":"Array of users matching the query criteria","type":"array","items":{"$ref":"#/components/schemas/UserResponseDto"}},"total":{"type":"number","description":"Total number of users matching the query criteria (before pagination)","minimum":0,"example":25},"count":{"type":"number","description":"Number of users returned in this response","minimum":0,"example":10},"offset":{"type":"number","description":"Number of users skipped (pagination offset)","minimum":0,"example":0}},"required":["users","total","count","offset"]},"DeleteUserWithTransferDto":{"type":"object","properties":{"transferMeetingTypes":{"type":"boolean","default":true,"description":"Whether to transfer meeting types"},"transferForms":{"type":"boolean","default":true,"description":"Whether to transfer forms"},"transferWorkflows":{"type":"boolean","default":true,"description":"Whether to transfer workflows/reminders"},"transferShowcases":{"type":"boolean","default":true,"description":"Whether to transfer showcases/funnels"},"transferAvailabilities":{"type":"boolean","default":true,"description":"Whether to transfer availabilities"},"transferQualifiers":{"type":"boolean","default":true,"description":"Whether to transfer qualifiers"},"targetUserId":{"type":"string","format":"uuid","description":"ID of the user to transfer resources to","example":"123e4567-e89b-12d3-a456-426614174000"}}},"UpdatePlatformUserDto":{"type":"object","properties":{"givenName":{"type":"string","description":"User's first name","example":"John"},"familyName":{"type":"string","description":"User's last name","example":"Smith"},"slug":{"type":"string","minLength":5,"description":"Public booking slug. Must be unique and at least 5 characters. Invalid characters are normalized automatically (e.g. 'John Doe' becomes 'john-doe').","example":"john-smith"}}},"UpdateUserCalendarSyncDTO":{"type":"object","properties":{"calendarSyncProviders":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/CalendarSync"}]},"id":{"type":"string","description":"id of the user to be updated.\nIf undefined, the user making the request is updated"}},"required":["calendarSyncProviders"]},"UpdateCalendarConnectionDto":{"type":"object","properties":{"primaryCalendar":{"type":"string","description":"Calendar ID to use for creating new events (e.g. \"primary\" for Google, or a specific calendar ID)","example":"primary"},"selectedCalendars":{"description":"Calendar IDs to check for availability conflicts. Pass the calendar IDs from the GET /calendars endpoint.","example":["primary","work@group.calendar.google.com"],"type":"array","items":{"type":"string"}},"validateAvailability":{"type":"boolean","description":"Whether to check this connection for availability conflicts when booking","example":true},"cancelIfDeclinedOrDeleted":{"type":"boolean","description":"Whether to auto-cancel the meetergo appointment if the attendee declines or deletes the calendar event","example":true},"disableAttendeeNotification":{"type":"boolean","description":"Whether to suppress attendee notifications on the calendar event","example":false},"syncBuffersToCalendar":{"type":"boolean","description":"Whether to sync buffer events to the connected calendar","example":false}}},"SignatureAreaDto":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":1,"description":"Left edge as a fraction of page width (0\u20131).","example":0.1},"y":{"type":"number","minimum":0,"maximum":1,"description":"Top edge as a fraction of page height (0\u20131), from the top.","example":0.8},"w":{"type":"number","minimum":0,"maximum":1,"description":"Width as a fraction of page width (0\u20131).","example":0.3},"h":{"type":"number","minimum":0,"maximum":1,"description":"Height as a fraction of page height (0\u20131).","example":0.08},"page":{"type":"number","minimum":1,"description":"Page number, 1-indexed (page 1 is the first page).","example":1}},"required":["x","y","w","h","page"]},"SignatureFieldDto":{"type":"object","properties":{"name":{"type":"string","maxLength":120,"description":"Field name.","example":"signature"},"type":{"type":"string","enum":["signature","initials","text","date","number"],"description":"Field type. Defaults to \"signature\".","example":"signature"},"areas":{"minItems":1,"description":"One or more placements of this field across the document pages.","type":"array","items":{"$ref":"#/components/schemas/SignatureAreaDto"}}},"required":["name","areas"]},"SignerInputDto":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"description":"Signer email address.","example":"john.doe@example.com"},"name":{"type":"string","maxLength":200,"description":"Signer display name.","example":"John Doe"},"role":{"type":"string","maxLength":120,"description":"Role label, e.g. \"First Party\".","example":"First Party"}}},"CreateSignatureRequestDto":{"type":"object","properties":{"name":{"type":"string","maxLength":200,"description":"Document / submission name.","example":"Order confirmation"},"file":{"type":"string","description":"The source PDF, base64-encoded (max 20 MB decoded).","example":"JVBERi0xLjcKJ..."},"fields":{"minItems":1,"description":"Fields to place on the document. Areas use normalized (0\u20131) coordinates with a top-left origin and 1-indexed pages \u2014 the same model as DocuSeal.","type":"array","items":{"$ref":"#/components/schemas/SignatureFieldDto"}},"signers":{"minItems":1,"description":"Signers (at least one).","type":"array","items":{"$ref":"#/components/schemas/SignerInputDto"}},"expiresAt":{"type":"string","description":"ISO-8601 timestamp after which signing links stop working.","example":"2026-12-31T23:59:59.000Z"},"language":{"type":"string","enum":["en","de"],"description":"Signing-page language. Supported: \"en\", \"de\". Defaults to English.","example":"de"},"completedRedirectUrl":{"type":"string","format":"uri","description":"URL the signer is sent to after completing (DocuSeal `completed_redirect_url`).","example":"https://app.example.com/contracts/123/signed"}},"required":["name","file","fields","signers"]},"SignerResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Signer id."},"email":{"type":"string","nullable":true,"description":"Signer email."},"name":{"type":"string","nullable":true,"description":"Signer name."},"role":{"type":"string","nullable":true,"description":"Role label."},"status":{"type":"string","description":"Signer status.","enum":["pending","completed"]},"signingUrl":{"type":"string","description":"The hosted signing link to send to this signer (the DocuSeal `embed_src` equivalent).","example":"https://cal.meetergo.com/s/V1StGXR8_Z5jdHi6B-myT"},"openedAt":{"format":"date-time","type":"string","nullable":true,"description":"When the signer opened the link."},"completedAt":{"format":"date-time","type":"string","nullable":true,"description":"When the signer completed signing."}},"required":["id","status","signingUrl"]},"SignatureRequestResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Signature request id."},"name":{"type":"string","description":"Document name."},"status":{"type":"string","description":"Overall status.","enum":["pending","completed","cancelled"]},"signers":{"description":"The signers and their signing links.","type":"array","items":{"$ref":"#/components/schemas/SignerResponseDto"}},"signedDocumentUrl":{"type":"string","nullable":true,"description":"Time-limited download URL for the signed (audit-paged, cryptographically signed) PDF. Present once status is \"completed\"."},"completedAt":{"format":"date-time","type":"string","nullable":true,"description":"When all signers completed."},"expiresAt":{"format":"date-time","type":"string","nullable":true,"description":"When signing links expire (null = never)."},"createdAt":{"format":"date-time","type":"string","description":"Creation time."}},"required":["id","name","status","signers","createdAt"]}}}}