openapi: 3.0.1
info:
  title: res:harmonics API
  description: >-
    The Res:Harmonics Public API provides seamless access to powerful tools for
    managing and automating property operations. Designed for developers and
    businesses, the API enables integration with Res:Harmonics’ platform to
    manage bookings, availability, rates, and guest experiences in real-time.
    With comprehensive documentation and robust endpoints, users can customise
    workflows, synchronise systems, and build tailored solutions to enhance
    operational efficiency. Whether you’re running serviced apartments,
    Build-to-Rent schemes, or co-living spaces, the Res:Harmonics API is your
    gateway to streamlined property management.
  termsOfService: https://www.resharmonics.com
  contact:
    name: Res:harmonics
    url: https://www.resharmonics.com
    email: support@resharmonics.com
  license:
    name: License of API
    url: https://www.resharmonics.com
  version: 3.0.9
servers:
  - url: https://apiv3.resharmonics-dev.com
    description: Testing API
  - url: https://apiv3.rerumapp.uk
    description: Production API
security:
  - OAuth2: []
tags:
  - name: Access Groups
    description: >-
      Access Group entities from the Property Management System (PMS), used to
      map access groups from integrated access control systems, providing
      detailed information and management capabilities for access control within
      buildings and facilities.
  - name: Activities
    description: Activities are tasks created in the PMS
  - name: Area
    description: >-
      Area Entity from the Property Management System (PMS). Areas are part of
      the geography of the PMS and are used to define the location of
      properties, including their hierarchical structure within cities and
      regions.
  - name: Availabilities
    description: >-
      Used to search for availability and pricing, including chargeable for
      specific dates. This endpoint allows users to query the availability of
      properties within the property management system (PMS), taking into
      account various parameters such as date ranges, unit types, guest counts,
      and promotional codes. It provides detailed information on available
      units, their rates, and any applicable restrictions or conditions.
  - name: Billing Frequencies
    description: >-
      Billing Frequency entity from the Property Management System (PMS), used
      to define the intervals at which billing occurs. This helps in organizing
      and managing financial operations efficiently within the PMS. Billing
      frequencies are essential for ensuring timely and accurate billing
      processes, which are crucial for maintaining financial stability and
      customer satisfaction within the PMS.
  - name: Booking Terms
    description: >-
      Booking Terms entity from the Property Management System (PMS), used to
      define the payment and settlement conditions associated with bookings.
      Booking terms help in establishing clear guidelines for payment schedules,
      deposit requirements, and settlement processes, ensuring smooth financial
      transactions and management of reservations within the PMS.
  - name: Booking Types
    description: >-
      Booking Type entity from the Property Management System (PMS), used to
      categorize bookings and define different behaviors. Booking types help in
      organizing and managing various booking categories within the PMS,
      ensuring efficient handling of reservations and associated operations.
  - name: Bookings
    description: >-
      Bookings entity from the PMS, the booking is the main entity for a
      reservation, it contains all the information about the reservation,
      combined with a list of room stays which represent the individual stays in
      the units
  - name: Building
    description: >-
      Represents the Building entity within the Property Management System
      (PMS). This includes comprehensive property details such as the building's
      name, address, facilities, operational attributes, and any associated
      metadata. The Building entity is essential for managing and integrating
      property data, ensuring accurate and up-to-date information for
      operational and administrative purposes.
  - name: Channels
    description: >-
      Represents sales channels within the Property Management System (PMS),
      allowing users to categorize different sales channels or booking mediums.
      Sales channels capture details such as the channel operator, commission,
      and other criteria. This functionality enhances searchability, reporting,
      and segmentation by enabling property managers to create and manage custom
      channels tailored to their operational needs. Channels can be used for
      filtering, grouping, and applying business logic to different entities
      across the PMS, supporting improved organization and data management.
  - name: City
    description: >-
      Represents the City entity within the PMS, including details such as the
      city's name, geographic location, and any associated properties or
      operational data. This entity is used to categorise and manage properties
      by location, enabling filtering and reporting based on city-level
      information.
  - name: Companies
    description: >-
      Represents the Company entities within the PMS, which include detailed
      information about organisations associated with properties, bookings, or
      other business operations. The Company entity contains attributes such as
      the company name, contact information, address, industry type, and
      relationships with contacts or accounts. It is used to manage corporate
      accounts, track business partnerships, and enable streamlined handling of
      organisation-level interactions within the system.
  - name: Contacts
    description: >-
      Represents the Contacts entity within the PMS CRM module, encompassing
      information about individuals or organisations associated with properties.
      This entity includes details such as names, contact information (e.g.,
      phone numbers, email addresses), roles, and relationship to specific
      properties or bookings. It is used for managing customer relationships,
      tracking communication history, and facilitating operations such as guest
      management or corporate account handling.
  - name: Cost Centres
    description: Cost Centres API for managing financial products and services.
  - name: Country
    description: >-
      Provides endpoints for managing Country entities within the Property
      Management System (PMS). These operations include retrieving country
      details, creating new country records, and updating existing country
      information. Country entities store essential geographical and regulatory
      data, such as country names, ISO codes, and associated regional settings.
      This functionality supports property localisation, tax configurations,
      currency settings, and compliance with international regulations.
  - name: Developments
    description: >-
      Represents the Developments entity within the Property Management System
      (PMS), which is used to manage real estate developments, property
      projects, or grouped property assets. A development typically consists of
      multiple buildings or units and includes key details such as location,
      associated properties, construction status, and project timelines. This
      entity supports large-scale property management by enabling structured
      organisation, tracking of development progress, and integration with
      booking, pricing, and operational workflows.
  - name: Extras
    description: >-
      Represents Extras within the Property Management System (PMS), which are
      additional services or products that can be added to a booking. Extras may
      include amenities such as parking, breakfast, airport transfers,
      housekeeping services, or any custom add-ons offered by the property.
      These entities are used to enhance guest experiences, provide personalised
      services, and generate additional revenue streams. Extras can be
      configured with pricing, availability rules, and booking conditions to
      ensure seamless integration with reservation workflows.
  - name: Feature Facility
    description: >-
      Represents Feature Facility entities within the Property Management System
      (PMS). Feature Facilities are used to categorize and manage various
      facilities associated with properties, such as amenities, services, and
      operational features. This functionality helps in organizing properties,
      defining operational capabilities, and generating facility-based insights.
      Feature Facilities can be used to enhance guest experiences, optimize
      resource allocation, and support strategic decision-making.
  - name: Guest Stays
    description: >-
      Represents Guest Stay entities within the Property Management System
      (PMS), which track individual guest stays associated with a room stay. A
      Guest Stay captures key details such as guest information, check-in and
      check-out dates, separate to the booked room, and stay status. This entity
      is essential for managing guest experiences, tracking physical occupancy,
      and facilitating seamless accommodation operations. 
  - name: Industries
    description: >-
      Represents Industry entities within the Property Management System (PMS),
      which categorise businesses, corporate clients, and organisations based on
      their industry sector. Industry entities are used to segment accounts,
      track market trends, and apply industry-specific pricing, policies, or
      reporting structures. This functionality supports better organisation,
      enhanced analytics, and streamlined management of corporate bookings and
      partnerships.
  - name: Issues
    description: >-
      Represents Issues within the Property Management System (PMS), which track
      and manage property-related concerns, maintenance requests, and guest
      service requests. Issues can include general maintenance tasks,
      housekeeping requests, guest complaints, or operational incidents that
      require resolution. This functionality supports efficient task assignment,
      workflow automation, and real-time issue tracking to ensure prompt
      resolution and enhance guest satisfaction. Issues can be associated with
      properties, units, bookings, or specific guest stays, enabling seamless
      communication between staff and management.
  - name: Leads
    description: >-
      APIs for creating Leads, leads are used to create basic opportunities in
      the system which can be converted to enquiries or bookings.
  - name: Market Segments
    description: >-
      Represents Market Segment entities within the Property Management System
      (PMS), which categorise customer groups based on booking patterns,
      demographics, or business classifications. Market segments help in
      defining pricing strategies, targeted marketing campaigns, and reporting
      insights. They are commonly used to differentiate corporate clients,
      leisure travelers, government bookings, wholesalers, and other key
      customer groups. This functionality enables property managers to optimise
      revenue, personalise guest experiences, and improve operational
      decision-making.
  - name: Nationalities
    description: >-
      Represents Nationality entities within the Property Management System
      (PMS), used to categorise guests, customers, or corporate clients based on
      their country of nationality. Nationality data supports compliance with
      regulatory requirements, enhances reporting and analytics, and enables
      targeted marketing or pricing strategies. This functionality helps
      property managers track guest demographics, improve customer segmentation,
      and personalise services based on nationality-specific preferences.
  - name: Notes
    description: >-
      APIs for managing notes and note categories. Create / Retrieve of notes
      are provided on the relevant entities, e.g. Bookings, Customers etc.
  - name: Organisations
    description: Organisations API for managing different financial entities.
  - name: Rates
    description: >-
      Endpoints for managing and querying rates and pricing within the PMS.
      These endpoints enable the creation, updating, retrieval, and deletion of
      rate records associated with properties, room types, and booking policies.
      Rate management functionality includes support for dynamic pricing,
      seasonal adjustments, promotional offers, and rate plans (e.g.,
      refundable, non-refundable). Additionally, these endpoints facilitate
      integration with revenue management systems, allowing for real-time
      updates and querying of rates based on availability, occupancy, and other
      parameters. This suite of endpoints is essential for optimising pricing
      strategies and ensuring accurate and efficient rate handling.
  - name: Referrers
    description: >-
      Represents Referrer entities within the Property Management System (PMS),
      which track sources of referrals for guests, bookings, or corporate
      clients. Referrers help identify the origin of reservations, whether from
      marketing campaigns, travel agencies, corporate partnerships, or other
      sources. This functionality enables property managers to analyse booking
      trends, measure the effectiveness of referral channels, and optimise
      marketing strategies. Referrer data can also be used for loyalty programs,
      commission tracking, and targeted promotions.
  - name: Region
    description: >-
      Represents Region entities within the Property Management System (PMS).
      Regions are used to categorize geographical areas for better management
      and reporting. This functionality helps in organizing properties, defining
      operational zones, and generating location-based insights. Regions can be
      used to optimize resource allocation, enhance guest experiences, and
      support strategic decision-making.
  - name: Room Stays
    description: >-
      Room stays are the specific stays in rooms under a booking, linking
      pricing, room, guests, and rates. This entity is part of the Property
      Management System (PMS) and is used to manage and track the details of
      each stay, including the duration, associated guests, and any additional
      services or charges. Room stays help in organizing bookings, ensuring
      accurate billing, and enhancing the overall guest experience.
  - name: Sales Invoices
    description: >-
      Operations related to Sales Invoice entity from the Property Management
      System (PMS), including retrieval, creation, updating, and deletion of
      sales invoices. This API provides endpoints to manage sales invoices,
      which are essential for tracking sales transactions, generating financial
      reports, and ensuring accurate billing. The operations include retrieving
      a list of all sales invoices, fetching details of a specific invoice,
      creating new invoices, updating existing invoices, and marking invoices as
      posted or exported to external finance systems. These functionalities help
      in maintaining the financial integrity and operational efficiency of the
      PMS.
  - name: Tags
    description: >-
      Represents Tag entities within the Property Management System (PMS),
      allowing users to categorise and organise various system entities with
      custom tag information. Tags provide a flexible way to label and classify
      properties, bookings, guests, accounts, and other records based on
      specific criteria. This functionality enhances searchability, reporting,
      and segmentation by enabling property managers to create and manage custom
      tags tailored to their operational needs. Tags can be used for filtering,
      grouping, and applying business logic to different entities across the
      PMS, supporting improved organisation and data management.
  - name: Teams
    description: >-
      Represents the Team entity within the Property Management System (PMS),
      which is used to manage groups of users or staff members associated with
      specific roles, responsibilities, or properties. The Team entity includes
      details such as team name, members, assigned tasks, and permissions. This
      functionality is essential for organising operational workflows, assigning
      responsibilities across properties, and ensuring efficient collaboration
      between staff members. Teams can be linked to specific properties,
      bookings, or tasks, enabling streamlined management and accountability in
      day-to-day operations.
  - name: Unit Access Groups
    description: >-
      Represents Unit Access Groups within the Property Management System (PMS),
      allowing access control and permission management for unit entities. Unit
      Access Groups link units to Access Groups which are the access control
      groups defined in external acces control systems. Contacts are linked to
      Access Groups for the duration of their stay based on unit they are
      staying in
  - name: Unit Contracts
    description: >-
      Manages unit contracts which define the relationship between property
      units and their contractual agreements. Provides endpoints for searching
      contracts, retrieving contract details, and accessing associated units.
      Used for managing lease agreements, rental terms, and property assignments
      within the system.
  - name: Unit Locations
    description: >-
      Represents Unit Location entities within the Property Management System
      (PMS), each location is associated with a specific unit which and can have
      multiple internal locations such as bathrooms, living spaces etcThis API
      allows for the management of unit locations, including retrieval,
      creation, and updates.
  - name: Unit Types
    description: >-
      Represents Unit Type entities within the Property Management System (PMS),
      defining the classification and characteristics of different units within
      a property. Unit Types help categorise accommodations based on factors
      such as size, layout, amenities, and occupancy capacity (e.g., studio,
      one-bedroom apartment, deluxe suite). This functionality is essential for
      inventory management, pricing strategies, availability searches, and
      reporting. Unit Types enable property managers to streamline booking
      processes, optimise revenue, and ensure accurate property listings across
      platforms.
  - name: Units
    description: >-
      Represents Unit entities within the Property Management System (PMS),
      which are individual accommodations available for booking within a
      property. Units can include apartments, hotel rooms, serviced residences,
      or other types of rentable spaces. Each Unit is associated with a Unit
      Type, property, and relevant metadata such as availability, capacity,
      amenities, and pricing. This functionality supports efficient inventory
      management, booking operations, and property administration, enabling
      property managers to track occupancy, apply pricing strategies, and manage
      unit-specific details. Units are integral to availability searches,
      booking workflows, and reporting analytics within the PMS.
  - name: Users
    description: >-
      Represents User entities within the Property Management System (PMS),
      managing authentication, authorisation, and role-based access control.
      Users can include property managers, front desk staff, housekeeping teams,
      administrators, and external partners, each with specific permissions and
      roles. This functionality enables secure access management, user activity
      tracking, and assignment of responsibilities within the PMS. User entities
      store essential details such as usernames, roles, contact information, and
      access privileges, ensuring proper security measures and operational
      control. The Users API facilitates user creation, role management,
      authentication, and administrative oversight.
paths:
  /api/v3/accessGroups:
    get:
      tags:
        - Access Groups
      summary: Retrieve list of Access Groups
      description: >-
        Retrieve list of Access Groups based on search parameters such as
        building ID and name. Supports pagination.
      operationId: listAllAccessGroups
      parameters:
        - name: buildingId
          in: query
          description: Id of a specific building linked to the access group
          required: false
          schema:
            type: integer
            format: int64
        - name: name
          in: query
          description: Name of access group
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageSaltoAccessGroupProjection'
    post:
      tags:
        - Access Groups
      summary: Create Access Group
      description: >-
        Create a new Access Group within the Property Management System (PMS).
        This endpoint allows you to add a new access group, which can be used to
        manage access control within buildings and facilities.
      operationId: createAccessGroup
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Access Group DTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Access Group DTO'
  /api/v3/accessGroups/{id}:
    get:
      tags:
        - Access Groups
      summary: Retrieve Access Group
      description: >-
        Retrieve an Access Group by Id. This endpoint allows you to fetch
        detailed information about a specific Access Group using its unique
        identifier. The response includes all relevant details of the Access
        Group.
      operationId: getUnitAccessGroupById_1
      parameters:
        - name: id
          in: path
          description: Id of Access Group
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Access Group DTO'
    put:
      tags:
        - Access Groups
      summary: Update Access Group
      description: >-
        Update an Access Group within the Property Management System (PMS). The
        Access Group must exist to be updated. This endpoint allows you to
        modify the details of an existing access group, ensuring that access
        control information is kept up-to-date.
      operationId: updateAccessGroup
      parameters:
        - name: id
          in: path
          description: Id of Access Group
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Access Group DTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Access Group DTO'
  /api/v3/activities:
    get:
      tags:
        - Activities
      summary: Retrieve a list of all activities.
      operationId: getNewActivities
      parameters:
        - name: subject
          in: query
          required: false
          schema:
            type: string
            default: ''
        - name: userAssigneeId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: teamAssigneeId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: companyAssigneeId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingReference
          in: query
          required: false
          schema:
            type: string
        - name: unitId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: unitName
          in: query
          required: false
          schema:
            type: string
        - name: buildingId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: buildingName
          in: query
          required: false
          schema:
            type: string
        - name: issueId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          required: false
          schema:
            type: string
        - name: activityType
          in: query
          required: false
          schema:
            type: string
        - name: dueDate
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: dueDateEnd
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: scheduledDate
          in: query
          required: false
          schema:
            type: string
            format: date-time
        - name: scheduledDateEnd
          in: query
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageActivityListItemProjection'
  /api/v3/activities/notes/{id}:
    get:
      tags:
        - Activities
      summary: Retrieve the specified activity note
      operationId: getActivityNote
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityNoteDTO'
  /api/v3/activities/{id}:
    get:
      tags:
        - Activities
      summary: Retrieve an activity specified by activity id.
      operationId: retrieveActivity
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityDTO'
  /api/v3/activities/{id}/notes:
    get:
      tags:
        - Activities
      summary: Retrieve the notes for an activity specified by activity identifier.
      operationId: getActivityNotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageActivityNoteDTO'
    post:
      tags:
        - Activities
      summary: Create a note on an activity specified by activity identifier.
      operationId: createActivityNotes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ActivityNoteCreateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityNoteDTO'
  /api/v3/activities/{id}/status:
    put:
      tags:
        - Activities
      summary: Update the status of an activity specified by activity id.
      operationId: updateActivityStatus_1
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatusUpdateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityDTO'
  /api/v3/areas:
    get:
      tags:
        - Area
      summary: Retrieve list of areas
      description: >-
        Retrieve a list of areas within the Property Management System (PMS).
        This endpoint allows you to fetch details about various geographical
        areas, including their hierarchical structure within cities and regions.
        Areas are used to define the location of properties and are essential
        for organizing and managing properties effectively within the PMS.
      operationId: listAllAreas
      parameters:
        - name: areaName
          in: query
          description: Name of the area
          required: false
          schema:
            type: string
        - name: cityId
          in: query
          description: ID of the city
          required: false
          schema:
            type: integer
            format: int64
        - name: cityName
          in: query
          description: Name of the city
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageAreaListItemProjection'
    post:
      tags:
        - Area
      summary: Create a new area
      description: >-
        Creates a new area within the Property Management System (PMS) with the
        provided details. Areas help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for adding new areas to the system for better management and
        reporting. The request body should contain the necessary details for the
        new area. If the creation is successful, the newly created area's
        details will be returned. In case of an unexpected system error, a `500
        Internal Server Error` will be triggered.
      operationId: createArea
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AreaDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AreaDTO'
  /api/v3/areas/{id}:
    get:
      tags:
        - Area
      summary: Retrieve an area by Id
      description: >-
        Retrieve the details of a specific area within the Property Management
        System (PMS) using its unique identifier. This endpoint allows you to
        fetch comprehensive information about a particular geographical area,
        including its hierarchical structure within cities and regions. Areas
        are essential for organizing and managing properties effectively within
        the PMS.
      operationId: getAreaById
      parameters:
        - name: id
          in: path
          description: ID of the area
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AreaDTO'
    put:
      tags:
        - Area
      summary: Update an existing area
      description: >-
        Updates an existing area within the Property Management System (PMS)
        with the provided details. Areas help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for modifying existing areas to reflect changes in
        geographical areas or operational zones. The request body should contain
        the updated details for the area. If the specified city ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: updateArea
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AreaDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AreaDTO'
    delete:
      tags:
        - Area
      summary: Delete a area by Id
      description: >-
        Deletes a specific area within the Property Management System (PMS)
        using its unique ID. Areas help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for removing areas that are no longer relevant or needed in
        the system. The area will be marked as deleted rather than permanently
        removed to maintain historical data integrity. If the specified area ID
        does not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: deleteAreaById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/availabilities:
    get:
      tags:
        - Availabilities
      summary: Retrieve real-time room availability
      description: >-
        Retrieve real-time room availability and corresponding pricing based on
        specified criteria such as date range, room type, occupancy, and
        applicable rate plans
      operationId: availabilitySearch
      parameters:
        - name: dateFrom
          in: query
          description: The start date of the availability search
          required: true
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: The end date of the availability search
          required: true
          schema:
            type: string
            format: date
        - name: inventoryType
          in: query
          description: The type of inventory to search for, either UNIT or UNIT_TYPE
          required: true
          schema:
            type: string
        - name: guests
          in: query
          description: The number of guests for the booking
          required: false
          schema:
            type: integer
            format: int32
        - name: unitTypeType
          in: query
          description: >-
            List of unit type types to search for, e.g. STUDIO, ONE_BEDROOM,
            TWO_BEDROOM
          required: false
          schema:
            type: array
            items:
              type: string
        - name: promoCode
          in: query
          description: Promotional code to apply to the search
          required: false
          schema:
            type: string
        - name: featureIds
          in: query
          description: List of feature facility IDs to search for
          required: false
          schema:
            type: array
            items:
              type: string
        - name: rateCode
          in: query
          description: Rate code to apply to the search
          required: false
          schema:
            type: string
        - name: rateId
          in: query
          description: Rate Id to apply to the search
          required: false
          schema:
            type: integer
            format: int64
        - name: ratePlanIds
          in: query
          description: List of rate plan IDs to search for
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: buildingIds
          in: query
          description: List of building IDs to search for
          required: false
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: cityId
          in: query
          description: City Id to search for
          required: false
          schema:
            type: integer
            format: int64
        - name: areaId
          in: query
          description: Area Id to search for
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingType
          in: query
          description: Restrict results based on type of booking
          required: false
          schema:
            type: string
            default: ''
        - name: availabilityGroupGridId
          in: query
          description: Restrict results based on the availability group grid id
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPagePropertyRateAvailabilityDTO'
  /api/v3/availabilities/unit/{unitId}/intervals:
    get:
      tags:
        - Availabilities
      summary: Retrieve intervals of availability
      description: >-
        Retrieve intervals of availability for a unit specified by unit id for a
        given date range. If no date range is specified, the next 365 days will
        be used. This endpoint is designed to provide a summary of availability
        over a period, 
      operationId: findAvailabilityIntervalsPerUnit
      parameters:
        - name: unitId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: dateFrom
          in: query
          description: The start date of the availability search
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: The end date of the availability search
          required: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageAvailabilityIntervalDto'
  /api/v3/billingFrequencies:
    get:
      tags:
        - Billing Frequencies
      summary: Retrieve all billing frequencies
      description: >-
        Retrieve a list of all billing frequencies within the Property
        Management System (PMS). This endpoint allows you to fetch details about
        different billing intervals, which help in organizing and managing
        various financial operations efficiently within the PMS.
      operationId: getBillingFrequencies
      parameters:
        - name: code
          in: query
          description: Filter billing frequencies by code
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBillingFrequencyDTO'
  /api/v3/billingFrequencies/{id}:
    get:
      tags:
        - Billing Frequencies
      summary: Retrieve billing frequency with specified id
      description: >-
        Retrieve the details of a specific billing frequency within the Property
        Management System (PMS) using its unique identifier. This endpoint
        allows you to fetch comprehensive information about a particular billing
        interval, including its characteristics and associated behaviors.
        Billing frequencies are essential for organizing and managing various
        financial operations efficiently within the PMS.
      operationId: getBillingFrequencyById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the billing frequency
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingFrequencyDTO'
  /api/v3/bookingTerms:
    get:
      tags:
        - Booking Terms
      summary: Retrieve all booking terms
      description: >-
        Retrieve a list of all booking terms within the Property Management
        System (PMS). This endpoint allows you to fetch details about different
        booking terms, which help in defining payment and settlement conditions
        associated with bookings, ensuring smooth financial transactions and
        management of reservations within the PMS.
      operationId: getBookingTerms
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingTermsDTO'
  /api/v3/bookingTerms/{id}:
    get:
      tags:
        - Booking Terms
      summary: Retrieve booking terms with specified id
      description: >-
        Retrieve the details of specific booking terms within the Property
        Management System (PMS) using its unique identifier. This endpoint
        allows you to fetch comprehensive information about a particular set of
        payment and settlement conditions, including their characteristics and
        associated behaviors. Booking terms are essential for defining how
        payments, deposits, and settlements are handled for reservations within
        the PMS.
      operationId: getBookingTermsById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the booking terms
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingTermsDTO'
  /api/v3/bookingTypes:
    get:
      tags:
        - Booking Types
      summary: Retrieve all booking types
      description: >-
        Retrieve a list of all booking types within the Property Management
        System (PMS). This endpoint allows you to fetch details about different
        booking categories, which help in organizing and managing various
        reservations and associated operations efficiently within the PMS.
      operationId: getBookingTypes
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingTypeDTO'
  /api/v3/bookingTypes/{id}:
    get:
      tags:
        - Booking Types
      summary: Retrieve booking type with specified id
      description: >-
        Retrieve the details of a specific booking type within the Property
        Management System (PMS) using its unique identifier. This endpoint
        allows you to fetch comprehensive information about a particular booking
        category, including its characteristics and associated behaviors.
        Booking types are essential for organizing and managing various
        reservations and operations efficiently within the PMS.
      operationId: getBookingTypeById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the booking type
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingTypeDTO'
  /api/v3/bookings:
    get:
      tags:
        - Bookings
      summary: Search for bookings
      description: >-
        Search for bookings via a variety of optional filters within the
        Property Management System (PMS). This endpoint allows you to filter
        bookings based on date ranges, statuses, unit IDs, booking contact IDs,
        and other criteria, providing a flexible way to retrieve specific
        booking information as needed.
      operationId: listAllBookings
      parameters:
        - name: dateFrom
          in: query
          description: >-
            Start of date range for which bookings are retrieved, based on start
            and end date of booking
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: >-
            End of date range for which bookings are retrieved, based on start
            and end date of booking
          required: false
          schema:
            type: string
            format: date
        - name: lastUpdatedFrom
          in: query
          description: >-
            Timestamp of the last update to the booking, returns bookings
            updated after this timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: lastUpdatedTo
          in: query
          description: >-
            Timestamp of the last update to the booking, returns bookings
            updated before this timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: createdFrom
          in: query
          description: >-
            Timestamp of the booking creation, returns bookings created after
            this timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: createdTo
          in: query
          description: >-
            Timestamp of the booking creation, returns bookings created before
            this timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: unitId
          in: query
          description: ID of the unit
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingContactId
          in: query
          description: ID of the booking contact
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingAccountId
          in: query
          description: ID of the booking account
          required: false
          schema:
            type: integer
            format: int64
        - name: billingAccountId
          in: query
          description: ID of the billing account
          required: false
          schema:
            type: integer
            format: int64
        - name: statuses
          in: query
          description: Array of statuses for the booking
          required: false
          schema:
            type: array
            items:
              type: string
            default:
              - CONFIRMED
              - CHECKED_IN
              - CHECKED_OUT
        - name: bookingReference
          in: query
          description: Booking reference number
          required: false
          schema:
            type: string
        - name: channelId
          in: query
          description: ID of the channel
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingId
          in: query
          description: ID of the booking
          required: false
          schema:
            type: integer
            format: int64
        - name: otaReference
          in: query
          description: >-
            The ota reference is the booking reference provided by the online
            travel agent and should match the reference shown on the customer’s
            confirmation from the 3rd party
          required: false
          schema:
            type: string
        - name: customerReference
          in: query
          description: Customer reference of booking
          required: false
          schema:
            type: string
        - name: organisationSettingsId
          in: query
          description: ID of the organisation settings
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingTypeId
          in: query
          description: ID of the booking type
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingRoomStayListItemProjection'
    post:
      tags:
        - Bookings
      summary: Create a booking/enquiry
      description: >-
        This endpoint is used to create a new booking with room stays in a
        ENQUIRY status. If 'reserveForMinutes' is specified the availability
        will be held for the number of minutes specified. Once the booking is
        created use the 'updateStatuses' endpoint to change the status to
        PENDING, CONFIRMED or CHECKED_IN.
      operationId: createBooking
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Booking'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingDTO'
  /api/v3/bookings/{bookingId}/payments:
    post:
      tags:
        - Bookings
      summary: Create a payment record against a booking.
      description: >-
        Creates a payment record against a booking. The payment record will be
        reconciled against any outstanding invoices. Where necessary invoices
        will be auto posted. The payDueBefore parameter can be used to specify
        invoices up to a certain date to be paid. If there is insufficient
        outstanding on invoices, the payment is rejected.
      operationId: reconcileBookingPayments
      parameters:
        - name: bookingId
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
        - name: payDueBefore
          in: query
          description: The date up to which invoices should be paid
          required: false
          schema:
            type: string
            format: date
        - name: user
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingPaymentCreateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageFinancialDTO'
  /api/v3/bookings/{bookingId}/updateStatuses:
    put:
      tags:
        - Bookings
      summary: Update roomstay statuses on a specified booking.
      description: >-
        This endpoint allows you to update the statuses of room stays associated
        with a specific booking within the Property Management System (PMS).
        Room stay statuses can include various states such as CONFIRMED,
        CHECKED_IN, CHECKED_OUT, etc. Updating these statuses helps in managing
        the booking lifecycle and ensuring accurate tracking of room occupancy
        and availability.
      operationId: updateBookingStatus
      parameters:
        - name: bookingId
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
        - name: user
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingStatusUpdateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRoomStayStatusUpdateResultDTO'
  /api/v3/bookings/{id}:
    get:
      tags:
        - Bookings
      summary: Retrieve a booking and its associated data.
      description: >-
        Retrieve detailed information about a specific booking within the
        Property Management System (PMS). This includes all associated data such
        as room stays, invoices, notes, and tags. This endpoint ensures
        comprehensive access to all relevant booking details, facilitating
        efficient management and tracking of reservations.
      operationId: getBookingDtoByIdentifier
      parameters:
        - name: id
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingDTO'
  /api/v3/bookings/{id}/customFields:
    get:
      tags:
        - Bookings
      summary: Get custom fields for a booking
      description: >-
        Retrieve all custom fields associated with a specific booking record in
        the booking module of the PMS. The response includes a list of custom
        fields, each containing details such as field name, type, and value.
        This endpoint is useful for accessing additional information stored in
        custom fields that are not part of the standard booking attributes.
      operationId: getCustomFieldsForBooking
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /api/v3/bookings/{id}/financialSummary:
    get:
      tags:
        - Bookings
      summary: Retrieve the financial summary for a specified booking
      description: >-
        Retrieve a detailed financial summary for a specific booking within the
        Property Management System (PMS). This includes all charges, payments,
        and adjustments related to the booking, providing a comprehensive
        overview of the booking's financial status. This endpoint ensures that
        all financial transactions linked to the booking are accessible,
        facilitating efficient financial management and tracking.
      operationId: getBookingPriceBreakdown
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingPriceBreakdown'
  /api/v3/bookings/{id}/notes:
    get:
      tags:
        - Bookings
      summary: Retrieve list of all notes for specified booking
      description: >-
        Retrieve a comprehensive list of all notes associated with a specific
        booking within the Property Management System (PMS). Notes provide
        detailed information about the booking, including comments, updates, and
        additional context. This endpoint ensures that all notes linked to the
        booking are accessible, facilitating efficient management and tracking
        of reservations.
      operationId: getNotesByBookingId
      parameters:
        - name: id
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingNoteDTO'
    post:
      tags:
        - Bookings
      summary: Record a note against a specified booking
      description: >-
        Record a note against a specified booking within the Property Management
        System (PMS). This endpoint allows you to add comments, updates, or
        additional information related to a booking. Notes provide detailed
        context and history for the booking, ensuring comprehensive tracking and
        management of reservations.
      operationId: createBookingNote
      parameters:
        - name: id
          in: path
          description: ID of booking
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NoteCreateDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingNoteDTO'
  /api/v3/bookings/{id}/roomStays:
    get:
      tags:
        - Bookings
      summary: Retrieve list of all room stays for specified booking
      description: >-
        Retrieve a comprehensive list of all room stays associated with a
        specific booking within the Property Management System (PMS). This
        endpoint provides detailed information about each room stay, including
        the status, duration, and associated unit. It ensures that all room
        stays linked to the booking are accessible, facilitating efficient
        management and tracking of reservations.
      operationId: getRoomStaysByBookingId
      parameters:
        - name: id
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingRoomStayListItemProjection'
  /api/v3/bookings/{id}/salesInvoices:
    get:
      tags:
        - Bookings
      summary: Retrieve list of all invoices for specified booking
      description: >-
        Retrieve a comprehensive list of all invoices associated with a specific
        booking within the Property Management System (PMS). This endpoint
        provides detailed financial information related to the booking,
        including all charges, payments, and adjustments. It ensures that all
        financial transactions linked to the booking are accessible,
        facilitating efficient financial management and tracking.
      operationId: getInvoicesByBookingId
      parameters:
        - name: id
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageSalesInvoiceListItemProjection'
  /api/v3/bookings/{id}/tags:
    get:
      tags:
        - Bookings
      summary: Retrieve list of all tags for specified booking
      description: >-
        Retrieve a comprehensive list of all tags associated with a specific
        booking within the Property Management System (PMS). Tags provide
        additional metadata and categorization for bookings, allowing for better
        organization and filtering. This endpoint ensures that all tags linked
        to the booking are accessible, facilitating efficient management and
        tracking of reservations.
      operationId: getTagsByBookingId
      parameters:
        - name: id
          in: path
          description: ID of the booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageTagDTO'
  /api/v3/buildings:
    get:
      tags:
        - Building
      summary: Retrieve list of buildings
      description: >-
        Retrieve a list of all buildings managed within the PMS. The response
        includes essential information for each building, such as its unique ID,
        name, address, facilities, and operational status. Optional query
        parameters can be included to refine the results, such as filtering by
        city, operational status, or specific attributes. This endpoint is
        particularly useful for displaying a catalogue of properties, managing
        building records, or integrating building data with external systems.
      operationId: listAllBuildings
      parameters:
        - name: buildingName
          in: query
          description: Name of the building to search for
          required: false
          schema:
            type: string
        - name: developmentName
          in: query
          description: Name of the development to search for
          required: false
          schema:
            type: string
        - name: developmentId
          in: query
          description: Id of the development to search for
          required: false
          schema:
            type: integer
            format: int64
        - name: areaName
          in: query
          description: Name of the area to search for
          required: false
          schema:
            type: string
        - name: areaId
          in: query
          description: Id of the area to search for
          required: false
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBuildingListItemProjection'
    post:
      tags:
        - Building
      summary: Create a new building
      description: >-
        Create a new building record in the property module of the PMS. The
        request body should contain the necessary details for the building, such
        as name, address, facilities, and operational attributes. Upon
        successful creation, the response will include the newly created
        building's details.
      operationId: createBuilding
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuildingDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingDTO'
  /api/v3/buildings/{id}:
    get:
      tags:
        - Building
      summary: Retrieve a building by ID
      description: >-
        Fetch detailed information about a specific building within the PMS
        using its unique identifier. The response includes details such as the
        building's name, address, facilities, operational status, and any
        associated metadata. This endpoint is typically used to view or manage
        property-specific information.
      operationId: getBuildingById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the building to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingDTO'
    put:
      tags:
        - Building
      summary: Update an existing building
      description: >-
        Update an existing building record in the property module of the PMS.
        The request body should contain the updated details for the building,
        such as name, address, facilities, and operational attributes. Upon
        successful update, the response will include the updated building's
        details.
      operationId: updateBuilding
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuildingDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingDTO'
    delete:
      tags:
        - Building
      summary: Delete a building by ID
      description: >-
        Delete a specific building record from the property module of the PMS
        using its unique identifier. This operation will remove the building and
        all associated data from the system. If the specified building ID does
        not exist, a not found error will be returned.
      operationId: deleteBuildingById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/buildings/{id}/accessCodes:
    get:
      tags:
        - Building
      summary: Get access Codes for a building
      description: >-
        Retrieve all access codes associated with a specific building record in
        the property module of the PMS. 
      operationId: getAccessCodeForBuilding
      parameters:
        - name: id
          in: path
          description: Unique identifier of the building to retrieve access codes for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBuildingAccessCodeDTO'
  /api/v3/buildings/{id}/customFields:
    get:
      tags:
        - Building
      summary: Get custom fields for a building
      description: >-
        Retrieve all custom fields associated with a specific building record in
        the property module of the PMS. The response includes a list of custom
        fields, each containing details such as field name, type, and value.
        This endpoint is useful for accessing additional information stored in
        custom fields that are not part of the standard building attributes.
      operationId: getCustomFieldsForBuilding
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCustomFieldDTO'
  /api/v3/channels:
    get:
      tags:
        - Channels
      summary: Retrieve all Channels
      description: >-
        Fetch a list of all channels within the Property Management System
        (PMS). This endpoint is useful for retrieving detailed information about
        channels, including their names and descriptions. The response includes
        a list of channels, which can be used for categorizing and organizing
        various system entities. If no channels are found, an empty list will be
        returned. In case of an unexpected system error, a `500 Internal Server
        Error` will be triggered.
      operationId: listChannels
      parameters:
        - name: name
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageChannelDTO'
  /api/v3/channels/{id}:
    get:
      tags:
        - Channels
      summary: Retrieve a specific Channel
      description: >-
        Fetch a specific channel within the Property Management System (PMS).
        This endpoint is useful for retrieving detailed information about a
        specific channel, including its name and description. If the channel is
        not found, a `404 Not Found` response will be triggered. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getChannelById
      parameters:
        - name: id
          in: path
          description: ID of the channel to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelDTO'
  /api/v3/cities:
    get:
      tags:
        - City
      summary: Retrieve list of cities
      description: >-
        Fetch a comprehensive list of cities available within the PMS. The
        response includes details for each city, such as its name, unique
        identifier, address, facilities, and operational status. Optional query
        parameters can be used to filter the results by criteria such as
        location, status, or associated city. This endpoint is useful for
        managing property inventories and facilitating searches across multiple
        cities.
      operationId: listAllCities
      parameters:
        - name: cityName
          in: query
          description: Name of the city to search for
          required: false
          schema:
            type: string
        - name: regionId
          in: query
          description: Id of the region to search for
          required: false
          schema:
            type: integer
            format: int64
        - name: regionName
          in: query
          description: Name of the region to search for
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCityListItemProjection'
    post:
      tags:
        - City
      summary: Create a new city
      description: >-
        Creates a new city within the Property Management System (PMS) with the
        provided details. Cities help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for adding new regions to the system for better management and
        reporting. The request body should contain the necessary details for the
        new city. If the creation is successful, the newly created city's
        details will be returned. In case of an unexpected system error, a `500
        Internal Server Error` will be triggered.
      operationId: createCity
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CityDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDTO'
  /api/v3/cities/{id}:
    get:
      tags:
        - City
      summary: Retrieve a city by id
      description: >-
        Fetch detailed information about a specific city within the PMS using
        its unique identifier. The response includes the city's name, associated
        properties, and any relevant metadata. This endpoint is commonly used to
        retrieve location-specific data to support property management and
        reporting functions.
      operationId: getCityById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the city to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDTO'
    put:
      tags:
        - City
      summary: Update an existing city
      description: >-
        Updates an existing city within the Property Management System (PMS)
        with the provided details. Cities help in organizing properties,
        defining operational zones, and generating location-based insights. This
        endpoint is useful for modifying existing citys to reflect changes in
        geographical areas or operational zones. The request body should contain
        the updated details for the city. If the specified city ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: updateCity
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CityDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDTO'
    delete:
      tags:
        - City
      summary: Delete a city by Id
      description: >-
        Deletes a specific city within the Property Management System (PMS)
        using its unique ID. Cities help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for removing cities that are no longer relevant or needed in
        the system. The city will be marked as deleted rather than permanently
        removed to maintain historical data integrity. If the specified city ID
        does not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: deleteCityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/companies:
    get:
      tags:
        - Companies
      summary: Retrieve list of companies by search filters
      description: >-
        Retrieve a paginated list of companies from the PMS based on specified
        search filters. Optional query parameters include company name, email
        address, telephone number, referrer, industry, market segment, and
        account ID. Each filter allows partial matches using wildcards for
        greater flexibility in searching. If no filters are provided, the
        endpoint returns all available companies. The response contains key
        details for each company, such as name, contact information, and
        industry, presented in a paginated format to facilitate navigation. This
        endpoint is ideal for managing corporate accounts, identifying business
        partnerships, and integrating company information with other systems.
        Pagination controls can be used to manage the size and order of results.
      operationId: listCompanies
      parameters:
        - name: companyName
          in: query
          description: Company name to search for
          required: false
          schema:
            type: string
        - name: emailAddress
          in: query
          description: Email address to search for
          required: false
          schema:
            type: string
        - name: telephoneNumber
          in: query
          description: Telephone number to search for
          required: false
          schema:
            type: string
        - name: referrer
          in: query
          description: Referrer to search for
          required: false
          schema:
            type: string
        - name: industry
          in: query
          description: Industry to search for
          required: false
          schema:
            type: string
        - name: marketSegment
          in: query
          description: Market segment to search for
          required: false
          schema:
            type: string
        - name: accountId
          in: query
          description: Account ID to search for
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCompanyListItemProjection'
    post:
      tags:
        - Companies
      summary: Create a new company
      description: >-
        Create a new company record in the PMS by providing the company details
        in the request body. The input JSON payload should include information
        such as the company's name, contact details, industry, and other
        relevant attributes. The authenticated user is associated with the
        creation for audit purposes. Upon successful creation, the response
        returns the full details of the newly created company, including its
        unique identifier. This endpoint is essential for adding new
        organisations to the system for management and operational purposes.
      operationId: createCompany
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyDTO'
  /api/v3/companies/merge:
    post:
      tags:
        - Companies
      summary: Merge two companies
      description: >-
        Merge the secondary company into the primary contact. Related records
        (e.g., activities, bookings, notes) are reassigned to the primary
        entity. Noop if any of the companies are null. Returns a success flag
        with a human-readable message.
      operationId: mergeCompanies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiMergeDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResult'
  /api/v3/companies/{id}:
    get:
      tags:
        - Companies
      summary: Retrieve company specified by company ID
      description: >-
        Retrieve detailed information about a specific company in the PMS by
        providing its unique company ID. The response includes comprehensive
        data such as the company's name, contact information, address, industry,
        and any associated metadata. If the specified company ID does not exist,
        a 'Not Found' error will be returned. This endpoint is useful for
        viewing and managing individual company records, enabling efficient
        retrieval of corporate account details.
      operationId: getCompanyById
      parameters:
        - name: id
          in: path
          description: Company ID to search for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyDTO'
    put:
      tags:
        - Companies
      summary: Update a company record
      description: >-
        Update an existing company record in the PMS by providing the company's
        unique ID and updated details in the request body. The input JSON
        payload should include the fields to be updated, such as the company's
        name, contact information, industry, or other attributes. The system
        verifies the existence of the company before applying the updates, and
        any attempt to update a non-existent company will result in a 'Not
        Found' error. Upon successful update, the response returns the full
        details of the updated company. This endpoint ensures efficient
        management of company records while maintaining data integrity.
      operationId: updateCompany
      parameters:
        - name: id
          in: path
          description: Company ID to update
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyDTO'
    delete:
      tags:
        - Companies
      operationId: deleteById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/companies/{id}/contacts:
    get:
      tags:
        - Companies
      summary: Get contacts for a company
      description: >-
        Retrieve all contacts associated with a specific company record in the
        CRM module of the PMS. The response includes a list of contact summary
        records, each containing details such as id, first name and last name.
        This endpoint is useful for accessing all company related contacts where
        only basic contact information is required.
      operationId: getContactsForCompany
      parameters:
        - name: id
          in: path
          description: Company ID to retrieve contacts for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /api/v3/companies/{id}/customFields:
    get:
      tags:
        - Companies
      summary: Get custom fields for a company
      description: >-
        Retrieve all custom fields associated with a specific company record in
        the CRM module of the PMS. The response includes a list of custom
        fields, each containing details such as field name, type, and value.
        This endpoint is useful for accessing additional information stored in
        custom fields that are not part of the standard company attributes.
      operationId: getCustomFieldsForCompany
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCustomFieldDTO'
  /api/v3/contacts:
    get:
      tags:
        - Contacts
      summary: Returns a list of contacts
      description: >-
        Retrieve a paginated list of contacts from the CRM module of the PMS.
        This endpoint supports optional query parameters to filter the results,
        including email address, first name, last name, telephone number, and
        account ID. If no filters are provided, the endpoint returns all
        available contacts in the system. The response includes a paginated list
        of contact records with key details, such as names and contact
        information, making it suitable for displaying contact directories or
        integrating with external systems. Pagination parameters can also be
        used to control the size and order of the result set.
      operationId: retrieveContacts
      parameters:
        - name: emailAddress
          in: query
          description: Email address of the contact
          required: false
          schema:
            type: string
        - name: firstName
          in: query
          description: First name of the contact
          required: false
          schema:
            type: string
        - name: lastName
          in: query
          description: Last name of the contact
          required: false
          schema:
            type: string
        - name: telephoneNumber
          in: query
          description: Telephone number of the contact
          required: false
          schema:
            type: string
        - name: accountId
          in: query
          description: Account ID of the contact
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageContactListItemProjection'
    post:
      tags:
        - Contacts
      summary: Create a contact
      description: >-
        Create a new contact record in the CRM module of the PMS. This endpoint
        accepts a JSON payload containing the contact's details, such as name,
        contact information (e.g., email, phone), role, and any related
        metadata. The authenticated user's details are used to associate the
        creation with an authorised account. Upon successful creation, the
        response returns the newly created contact's data, including its unique
        identifier. This endpoint is essential for adding new individuals or
        organisations to the contact database for guest management or
        operational purposes.
      operationId: createContact
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDTO'
  /api/v3/contacts/merge:
    post:
      tags:
        - Contacts
      summary: Merge two contacts
      description: >-
        Merge the secondary contact into the primary contact. Related records
        (e.g., activities, bookings, notes, attachments, keys) are reassigned to
        the primary contact. Noop if any of the contacts are null. Returns a
        success flag with a human-readable message.
      operationId: mergeContacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiMergeDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResult'
  /api/v3/contacts/{id}:
    get:
      tags:
        - Contacts
      summary: Retrieve contact using contact ID
      description: >-
        Fetch detailed information about a specific contact in the CRM module of
        the PMS using their unique contact ID. The response includes key details
        such as the contact's name, contact information (e.g., email, phone),
        role, associated organisation, and any linked properties or bookings.
        This endpoint is essential for accessing and managing individual contact
        records for guest management, corporate accounts, or operational
        purposes.
      operationId: getContactById
      parameters:
        - name: id
          in: path
          description: Contact ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDTO'
    put:
      tags:
        - Contacts
      summary: Update a contact record
      description: >-
        Update an existing contact record in the CRM module of the PMS. This
        endpoint requires the contact's unique ID as a path variable and a JSON
        payload containing the updated contact details, such as name, contact
        information, role, or related metadata. The system verifies the
        existence of the contact and applies locking mechanisms to prevent
        concurrent modifications during the update process. Upon successful
        completion, the updated contact record is saved, and the response
        includes the latest contact details. This endpoint is essential for
        maintaining up-to-date contact information and ensuring data integrity
        in the CRM module.
      operationId: updateContact
      parameters:
        - name: id
          in: path
          description: Contact ID
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactDTO'
    delete:
      tags:
        - Contacts
      operationId: deleteContactById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/contacts/{id}/customFields:
    get:
      tags:
        - Contacts
      summary: Get custom fields for a contact
      description: >-
        Retrieve all custom fields associated with a specific contact record in
        the CRM module of the PMS. The response includes a list of custom
        fields, each containing details such as field name, type, and value.
        This endpoint is useful for accessing additional information stored in
        custom fields that are not part of the standard contact attributes.
      operationId: getCustomFieldsForContact
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCustomFieldDTO'
  /api/v3/contacts/{id}/notes:
    get:
      tags:
        - Contacts
      summary: Get notes from a contact record
      description: >-
        Retrieve all notes associated with a specific contact record in the CRM
        module of the PMS. The response includes a list of notes, each
        containing details such as the note's content, creation date, author,
        and any associated tags or categories. This endpoint is useful for
        tracking communication history, documenting interactions, and
        maintaining a comprehensive record of engagements with contacts.
      operationId: getContactNotes
      parameters:
        - name: id
          in: path
          description: Contact ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageContactNoteDTO'
    post:
      tags:
        - Contacts
      summary: Record a note against a specified contact
      description: >-
        Record a note against a specified contact within the Property Management
        System (PMS). This endpoint allows you to add comments, updates, or
        additional information related to a booking. Notes provide detailed
        context and history for the booking, ensuring comprehensive tracking and
        management of reservations.
      operationId: createNote
      parameters:
        - name: id
          in: path
          description: ID of contact
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NoteCreateDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteDTO'
  /api/v3/costCentres:
    get:
      tags:
        - Cost Centres
      summary: Retrieve list of all cost centres
      description: >-
        Fetch a comprehensive list of cost centres available within the PMS. The
        response includes details for each cost centre, such as its name, unique
        identifier, and operational status. This endpoint is useful for managing
        financial products and services.
      operationId: listAllProducts
      parameters:
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCostCentreDTO'
  /api/v3/costCentres/{id}:
    get:
      tags:
        - Cost Centres
      summary: Retrieve cost centre by id
      description: >-
        Fetch a specific cost centre by its unique identifier. The response
        includes details such as the name, code, and export name of the cost
        centre. This endpoint is useful for retrieving detailed information
        about a specific cost centre.
      operationId: getById_1
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CostCentreDTO'
  /api/v3/countries:
    get:
      tags:
        - Country
      summary: Retrieve list of countries
      description: >-
        Retrieve a paginated list of countries stored within the Property
        Management System (PMS). This endpoint supports optional filtering by
        country name using the `countryName` query parameter, which allows
        partial matching for flexible searches. The response includes key
        country details such as country name, ISO codes, and other relevant
        metadata. This endpoint is useful for managing country-specific
        configurations, including localisation, tax settings, and currency
        associations. If no search criteria are provided, all available country
        records will be returned in a paginated format.
      operationId: listAllCountries
      parameters:
        - name: countryName
          in: query
          description: Name of the country to search for
          required: false
          schema:
            type: string
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCountryListItemProjection'
  /api/v3/countries/{id}:
    get:
      tags:
        - Country
      summary: Retrieve a country by ID
      description: >-
        Fetch detailed information about a specific country within the Property
        Management System (PMS) by providing its unique ID. The response
        includes essential country details such as the country's name, ISO
        codes, and any associated metadata. This endpoint is commonly used for
        retrieving country-specific settings related to localisation, tax
        regulations, and currency configurations. If the specified country ID
        does not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getCountryById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the country
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountryDTO'
  /api/v3/developments:
    get:
      tags:
        - Developments
      summary: Retrieve list of developments
      description: >-
        Retrieve a paginated list of developments within the Property Management
        System (PMS). This endpoint supports optional filtering by development
        name, area ID, or area name, allowing flexible search criteria. Each
        development represents a property project or a group of buildings and
        includes key details such as name, location, and associated properties.
        The response provides a structured list of developments, which is useful
        for managing large-scale property assets, tracking project status, and
        integrating with booking and operational workflows. If no filters are
        applied, all available developments will be returned in a paginated
        format.
      operationId: listAllDevelopments
      parameters:
        - name: developmentName
          in: query
          description: Filter by development name (case-insensitive, wildcard supported)
          required: false
          schema:
            type: string
        - name: areaId
          in: query
          description: Filter by area ID
          required: false
          schema:
            type: integer
            format: int64
        - name: areaName
          in: query
          description: Filter by area name (case-insensitive, wildcard supported)
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageDevelopmentListItemProjection'
    post:
      tags:
        - Developments
      summary: Create a new development
      description: >-
        Create a new development within the Property Management System (PMS).
        This endpoint allows you to add a new development with its associated
        properties, location, and other relevant details. The request body
        should contain the development information in the form of a
        DevelopmentDTO. If the creation is successful, the response will include
        the newly created development's details. In case of validation errors or
        system issues, appropriate error responses will be returned.
      operationId: createDevelopment
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevelopmentDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevelopmentDTO'
  /api/v3/developments/{id}:
    get:
      tags:
        - Developments
      summary: Retrieve a development by ID
      description: >-
        Fetch detailed information about a specific development within the
        Property Management System (PMS) using its unique ID. The response
        includes key details such as the development's name, associated
        buildings, location, status, and other relevant metadata. This endpoint
        is useful for retrieving structured property development data,
        supporting asset management, and integrating with booking and
        operational workflows. If the specified development ID does not exist, a
        `404 Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getDevelopmentById
      parameters:
        - name: id
          in: path
          description: Development ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevelopmentDTO'
    put:
      tags:
        - Developments
      summary: Update an existing development
      description: >-
        Update the details of an existing development within the Property
        Management System (PMS). This endpoint allows you to modify the
        development's properties, location, and other relevant details. The
        request body should contain the updated information in the form of a
        DevelopmentDTO. If the specified development ID does not exist, a `404
        Not Found` error will be returned. In case of validation errors or
        system issues, appropriate error responses will be returned.
      operationId: updateDevelopment
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DevelopmentDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevelopmentDTO'
    delete:
      tags:
        - Developments
      summary: Delete a development by ID
      description: >-
        Delete an existing development within the Property Management System
        (PMS) using its unique ID. This endpoint allows you to remove a
        development and all its associated data from the system. If the
        specified development ID does not exist, a `404 Not Found` error will be
        returned. In case of system errors during the deletion process, a `500
        Internal Server Error` will be triggered.
      operationId: deleteDevelopmentById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/developments/{id}/featuresFacilities:
    get:
      tags:
        - Developments
      summary: Retrieve features and facilities for a development
      description: >-
        Fetch a list of features and facilities associated with a specific
        development using its unique ID. This endpoint returns detailed
        information about amenities, facilities, and special features available
        within the development. The response is paginated and includes both
        standard and custom features that characterize the development. If the
        specified development ID does not exist, a `404 Not Found` error will be
        returned. In case of system errors during retrieval, a `500 Internal
        Server Error` will be triggered.
      operationId: getFeatureFacilities_1
      parameters:
        - name: id
          in: path
          description: The unique identifier of the development
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageFeatureFacilityDTO'
    put:
      tags:
        - Developments
      summary: Update (replace) feature facilities for a development
      description: >-
        Update the list of feature facilities associated with a specific
        development using its unique ID. This endpoint allows you to replace the
        existing feature facilities with a new set of facilities, updating the
        development's amenities and services. The request body should contain a
        list of feature facility IDs to be linked. If the specified development
        ID does not exist, a `404 Not Found` error will be returned. In case of
        system errors during the update process, a `500 Internal Server Error`
        will be triggered.
      operationId: updateFeatureFacilities_1
      parameters:
        - name: id
          in: path
          description: The unique identifier of the development
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/developments/{id}/featuresFacilities/link:
    post:
      tags:
        - Developments
      summary: Link (add) feature facilities to a development
      description: >-
        Link existing feature facilities to a specific development using its
        unique ID. This endpoint allows you to associate multiple feature
        facilities with a development, enhancing its amenities and services. The
        request body should contain a list of feature facility IDs to be linked.
        If the specified development ID does not exist, a `404 Not Found` error
        will be returned. In case of system errors during the linking process, a
        `500 Internal Server Error` will be triggered.
      operationId: linkFacilitiesToDevelopment
      parameters:
        - name: id
          in: path
          description: The unique identifier of the development
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/developments/{id}/featuresFacilities/unlink:
    post:
      tags:
        - Developments
      summary: Unlink (remove) feature facilities from a development
      description: >-
        Unlink existing feature facilities from a specific development using its
        unique ID. This endpoint allows you to remove multiple feature
        facilities from a development, updating its amenities and services. The
        request body should contain a list of feature facility IDs to be
        unlinked. If the specified development ID does not exist, a `404 Not
        Found` error will be returned. In case of system errors during the
        unlinking process, a `500 Internal Server Error` will be triggered.
      operationId: deleteFeatureFacilities_1
      parameters:
        - name: id
          in: path
          description: The unique identifier of the development
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/developments/{id}/images:
    get:
      tags:
        - Developments
      summary: Retrieve development images
      description: >-
        Fetch a paginated list of images associated with a specific development
        using its unique ID. This endpoint allows you to retrieve images that
        are linked to the development, which can include photos of the property,
        architectural designs, or other relevant visuals. The response includes
        image details such as file name, size, and type. If the specified
        development ID does not exist, a `404 Not Found` error will be returned.
        In case of system errors during retrieval, a `500 Internal Server Error`
        will be triggered.
      operationId: getDevelopmentImages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageDevelopmentImageDTO'
  /api/v3/developments/{id}/images/upload:
    post:
      tags:
        - Developments
      summary: Upload a new development image
      description: >-
        Upload a new image for a specific development using its unique ID. This
        endpoint allows you to add images that are linked to the development,
        which can include photos of the property, architectural designs, or
        other relevant visuals. The uploaded file should be provided as a
        multipart file in the request. If the specified development ID does not
        exist, a `404 Not Found` error will be returned. In case of system
        errors during the upload process, a `500 Internal Server Error` will be
        triggered.
      operationId: createNewDevelopmentImage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              required:
                - file
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DevelopmentImageDTO'
  /api/v3/developments/{id}/images/{imageId}:
    delete:
      tags:
        - Developments
      summary: Delete a development image by ID
      description: >-
        Delete an existing image associated with a specific development using
        its unique ID. This endpoint allows you to remove an image that is
        linked to the development. If the specified development or image ID does
        not exist, a `404 Not Found` error will be returned. In case of system
        errors during the deletion process, a `500 Internal Server Error` will
        be triggered.
      operationId: deleteDevelopmentImage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: imageId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/extras:
    get:
      tags:
        - Extras
      summary: Search for chargeable extras
      description: >-
        Retrieve a paginated list of chargeable extras within the Property
        Management System (PMS). Chargeable extras represent additional services
        or products that can be added to bookings, such as parking, meals, or
        cleaning services. This endpoint allows filtering by billing frequency,
        building ID, and whether the extra is available through the Internet
        Booking Engine (IBE). The response includes details about each extra,
        such as pricing, availability, and applicable billing rules. If an
        invalid billing frequency is provided, a `400 Bad Request` error will be
        returned. If no filters are applied, all available chargeable extras
        will be returned in a paginated format, making it easier to manage and
        integrate additional services into property operations.
      operationId: searchAllExtras
      parameters:
        - name: billingFrequency
          in: query
          description: Filter by billing frequency
          required: false
          schema:
            type: string
          example: MONTHLY
        - name: buildingId
          in: query
          description: Filter by building ID
          required: false
          schema:
            type: integer
            format: int64
          example: 1
        - name: availableThroughIBE
          in: query
          description: Filter by availability through IBE
          required: false
          schema:
            type: boolean
          example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageChargeableExtraDTO'
  /api/v3/extras/{rateId}:
    get:
      tags:
        - Extras
      summary: Retrieve compulsory chargeable extras for a rate ID
      description: >-
        Fetch a list of compulsory chargeable extras associated with a specific
        rate code within the Property Management System (PMS). Compulsory extras
        are additional services or fees that must be included when booking a
        rate, such as cleaning fees, resort fees, or mandatory meal plans. This
        endpoint requires the `rateCode` as a path variable and a date range
        (`startDate` and `endDate`) as query parameters to determine the
        applicable extras for the specified period. The response includes
        details about each extra, including pricing, validity dates, and
        availability. This functionality is useful for ensuring that mandatory
        add-ons are applied correctly in booking workflows and pricing
        calculations. If the rate code does not exist or is invalid, an
        appropriate error response will be returned.
      operationId: retrieveCompulsoryExtrasForRateId
      parameters:
        - name: rateId
          in: path
          description: Unique identifier for the rate ID
          required: true
          schema:
            type: integer
            format: int64
          example: RACK
        - name: startDate
          in: query
          description: Start date for the rate ID
          required: true
          schema:
            type: string
            format: date
          example: '2022-01-01'
        - name: endDate
          in: query
          description: End date for the rate ID
          required: true
          schema:
            type: string
            format: date
          example: '2022-01-31'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageChargeableExtraDTO'
  /api/v3/extras/{roomStayExtraId}/payment:
    post:
      tags:
        - Extras
      summary: Record a payment against an extra attached to a room stay
      description: >-
        Registers a payment for a chargeable extra linked to a specific room
        stay within the Property Management System (PMS). This endpoint requires
        the `roomStayExtraId` as a path variable to identify the extra and a
        payment request body containing the payment details. It verifies the
        existence of the room stay extra and checks for any associated sales
        invoices. If an outstanding balance remains, the payment is processed
        and recorded. The response includes financial details related to the
        transaction, such as the payment reference and updated invoice status.
        If the extra does not exist, the invoice is already paid, or there are
        no invoices to process, a `400 Bad Request` error will be returned.
      operationId: updateExtraPayment
      parameters:
        - name: roomStayExtraId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChargeableExtraPaymentDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialDTO'
  /api/v3/featureFacilities:
    get:
      tags:
        - Feature Facility
      summary: Retrieve list of feature facilities
      description: >-
        Fetch a comprehensive list of feature facilities available within the
        PMS. The response includes details for each feature facility, such as
        its name, unique identifier, and operational status. This endpoint is
        useful for managing property inventories and facilitating searches
        across multiple feature facilities.
      operationId: retrieveFeatureFacilities
      parameters:
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageFeatureFacilityDTO'
  /api/v3/guestStays:
    get:
      tags:
        - Guest Stays
      summary: Retrieve Guest Stays from defined parameters.
      description: >-
        Retrieve a paginated list of guest stays within the Property Management
        System (PMS) based on specified search criteria. This endpoint allows
        filtering by date range (`dateFrom` and `dateTo`), unit ID, contact ID,
        guest details (email, first name, last name), status (`CONFIRMED`,
        `CHECKED_IN`, `CHECKED_OUT` by default), and booking reference. Guest
        Stays represent individual guest reservations linked to a room stay and
        include key details such as guest identity, booking status, and
        associated property information. The response provides a paginated list
        of Guest Stay records, making it useful for tracking occupancy, managing
        guest check-ins and check-outs, and retrieving stay details for
        reporting or operational purposes. If no filters are provided, all guest
        stays within the default parameters will be returned.
      operationId: listAllGuestStays
      parameters:
        - name: dateFrom
          in: query
          description: Start date of the date range to filter guest stays
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: End date of the date range to filter guest stays
          required: false
          schema:
            type: string
            format: date
        - name: unitId
          in: query
          description: Unique identifier of the unit to filter guest stays
          required: false
          schema:
            type: integer
            format: int64
        - name: contactId
          in: query
          description: Unique identifier of the contact to filter guest stays
          required: false
          schema:
            type: integer
            format: int64
        - name: emailAddress
          in: query
          description: Email address of the guest to filter guest stays
          required: false
          schema:
            type: string
        - name: firstName
          in: query
          description: First name of the guest to filter guest stays
          required: false
          schema:
            type: string
        - name: lastName
          in: query
          description: Last name of the guest to filter guest stays
          required: false
          schema:
            type: string
        - name: statuses
          in: query
          description: >-
            Status of the guest stay to filter guest stays (Default to
            CONFIRMED,CHECKED_IN,CHECKED_OUT if not specified
          required: false
          schema:
            type: array
            items:
              type: string
            default:
              - CONFIRMED
              - CHECKED_IN
              - CHECKED_OUT
        - name: bookingReference
          in: query
          description: Booking reference of the guest stay to filter guest stays
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageGuestStayListItemProjection'
  /api/v3/guestStays/{id}:
    get:
      tags:
        - Guest Stays
      summary: Retrieve Guest Stay by ID
      description: >-
        Fetch detailed information about a specific Guest Stay within the
        Property Management System (PMS) using its unique ID. A Guest Stay
        represents an individual guest's reservation linked to a room stay and
        includes key details such as check-in and check-out dates, assigned
        unit, guest information, booking reference, and stay status. This
        endpoint is useful for retrieving stay-specific data for guest
        management, reporting, or operational workflows. If the specified Guest
        Stay ID does not exist, a `404 Not Found` error will be returned. In
        case of an unexpected system error, a `500 Internal Server Error` will
        be triggered.
      operationId: getGuestStayById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the Guest Stay
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuestStayDTO'
  /api/v3/industries:
    get:
      tags:
        - Industries
      summary: Retrieve all industries
      description: >-
        Fetch a list of all industries stored within the Property Management
        System (PMS). Industries represent business sectors and are used for
        categorising corporate clients, segmenting accounts, and applying
        industry-specific pricing, policies, or reporting structures. The
        response includes details of each industry, providing a structured way
        to organise and manage business relationships within the PMS. This
        endpoint is useful for analytics, market segmentation, and corporate
        account management. If an unexpected system error occurs, a `500
        Internal Server Error` will be triggered.
      operationId: listIndustries
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIndustryDTO'
  /api/v3/industries/{id}:
    get:
      tags:
        - Industries
      summary: Retrieve industry by ID
      description: >-
        Fetch detailed information about a specific industry within the Property
        Management System (PMS) using its unique ID. Industries are used to
        categorise corporate clients, segment accounts, and manage
        industry-specific pricing, policies, or reporting structures. The
        response includes key details about the industry, making it useful for
        analytics, business segmentation, and corporate account management. If
        the specified industry ID does not exist, a `404 Not Found` error will
        be returned. In case of an unexpected system error, a `500 Internal
        Server Error` will be triggered.
      operationId: getIndustryById
      parameters:
        - name: id
          in: path
          description: The unique identifier of the industry
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndustryDTO'
  /api/v3/issues:
    get:
      tags:
        - Issues
      summary: Retrieve a list of issues
      description: >-
        Fetch a paginated list of issues within the Property Management System
        (PMS), representing property management tasks, maintenance requests, or
        guest service concerns. This endpoint allows filtering by multiple
        parameters, including issue details (ID, subject, status, type,
        priority), assignment details (assignee user or team), date ranges
        (reported date, response target date, resolution target date, last
        updated date), and related entities (booking, unit, or building). The
        response includes key issue details, making it useful for tracking
        operational tasks, managing maintenance workflows, and ensuring
        efficient resolution. If no filters are applied, all available issues
        will be returned in a paginated format. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: retrieveIssues
      parameters:
        - name: issueId
          in: query
          description: Issue ID
          required: false
          schema:
            type: integer
            format: int64
        - name: subject
          in: query
          description: Subject
          required: false
          schema:
            type: string
        - name: assigneeUserId
          in: query
          description: Assignee User ID
          required: false
          schema:
            type: integer
            format: int64
        - name: assigneeTeamId
          in: query
          description: Assignee Team ID
          required: false
          schema:
            type: integer
            format: int64
        - name: reportedDate
          in: query
          description: Reported Date
          required: false
          schema:
            type: string
            format: date
        - name: reportedDateEnd
          in: query
          description: Reported Date End
          required: false
          schema:
            type: string
            format: date
        - name: responseTargetDate
          in: query
          description: Response Target Date
          required: false
          schema:
            type: string
            format: date
        - name: responseTargetDateEnd
          in: query
          description: Response Target Date End
          required: false
          schema:
            type: string
            format: date
        - name: resolutionTargetDate
          in: query
          description: Resolution Target Date
          required: false
          schema:
            type: string
            format: date
        - name: resolutionTargetDateEnd
          in: query
          description: Resolution Target Date End
          required: false
          schema:
            type: string
            format: date
        - name: issueLastUpdatedDate
          in: query
          description: Issue Last Updated Date
          required: false
          schema:
            type: string
            format: date
        - name: issueLastUpdatedDateEnd
          in: query
          description: Issue Last Updated Date End
          required: false
          schema:
            type: string
            format: date
        - name: bookingId
          in: query
          description: Booking ID
          required: false
          schema:
            type: integer
            format: int64
        - name: unitId
          in: query
          description: Unit ID
          required: false
          schema:
            type: integer
            format: int64
        - name: buildingId
          in: query
          description: Building ID
          required: false
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          description: Status
          required: false
          schema:
            type: string
        - name: issueTypeId
          in: query
          description: Issue Type ID
          required: false
          schema:
            type: integer
            format: int64
        - name: priorityId
          in: query
          description: Priority ID
          required: false
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIssueListProjection'
    post:
      tags:
        - Issues
      summary: Create new issue
      description: >-
        Create a new issue within the Property Management System (PMS) to track
        property-related concerns, maintenance requests, or guest service
        requests. This endpoint accepts a JSON payload containing issue details,
        including description, priority, category, associated property or unit,
        and reporter information. The created issue is linked to relevant
        entities such as a property, unit, booking, or guest stay to facilitate
        efficient resolution. The response returns the newly created issue with
        a unique identifier. If any referenced object IDs do not exist in the
        PMS, a `400 Bad Request` error will be returned due to data integrity
        violations. In case of an unexpected error, a `500 Internal Server
        Error` will be triggered.
      operationId: createEntity
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Issue'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
  /api/v3/issues/issuePriorities:
    get:
      tags:
        - Issues
      summary: Retrieve a list of all issue priorities
      description: >-
        Fetch a list of all available issue priorities within the Property
        Management System (PMS). Issue priorities help classify and manage the
        urgency of property-related concerns, maintenance requests, or guest
        service issues. Priorities can include different levels, such as 'Low',
        'Medium', 'High', or custom-defined priority levels, ensuring that
        critical issues are addressed promptly. This endpoint provides
        structured priority data to facilitate efficient issue management,
        resource allocation, and response time tracking. The response includes a
        list of issue priorities along with relevant metadata. If an unexpected
        system error occurs, a `500 Internal Server Error` will be triggered.
      operationId: getIssuePriority
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIssuePriorityDTO'
  /api/v3/issues/issuePriorities/{id}:
    get:
      tags:
        - Issues
      summary: Retrieve an issue priority by ID
      description: >-
        Fetch detailed information about a specific issue priority within the
        Property Management System (PMS) using its unique ID. Issue priorities
        define the urgency of property-related concerns, maintenance requests,
        or guest service issues, ensuring efficient task management and
        resolution. The response includes key details such as the priority level
        and its associated metadata. If the specified priority ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getIssuePriority_1
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssuePriorityDTO'
  /api/v3/issues/issueStatuses:
    get:
      tags:
        - Issues
      summary: Retrieve a list of all issue statuses
      description: >-
        Fetch a list of all possible issue statuses within the Property
        Management System (PMS). Issue statuses indicate the current progress of
        property-related concerns, maintenance requests, or guest service
        issues. Common statuses include `OPEN`, `STARTED`, `RESOLVED`, and
        `CLOSED`, ensuring clear tracking of an issue's lifecycle. This endpoint
        provides structured status data to help streamline issue management,
        prioritisation, and resolution workflows. The response includes a list
        of predefined issue statuses. If an unexpected system error occurs, a
        `500 Internal Server Error` will be triggered.
      operationId: getIssueStatuses
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIssueStatus'
  /api/v3/issues/issueTypes:
    get:
      tags:
        - Issues
      summary: Retrieve a list of all issue types
      description: >-
        Fetch a list of all available issue types within the Property Management
        System (PMS). Issue types categorise different kinds of property-related
        concerns, maintenance requests, or guest service issues, such as
        housekeeping, technical repairs, complaints, or general inquiries. This
        endpoint provides a structured way to classify and manage operational
        issues, ensuring efficient tracking and resolution. The response
        includes a list of issue types, each containing relevant metadata. If an
        unexpected system error occurs, a `500 Internal Server Error` will be
        triggered.
      operationId: getIssueTypes
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIssueTypeDTO'
  /api/v3/issues/{id}:
    get:
      tags:
        - Issues
      summary: Retrieve issue entity by ID
      description: >-
        Fetch detailed information about a specific issue within the Property
        Management System (PMS) using its unique ID. Issues represent property
        management concerns, maintenance requests, or guest service requests.
        The response includes key details such as issue type, description,
        status, priority, associated property or unit, and reporting details.
        This endpoint is useful for tracking ongoing issues, managing
        maintenance workflows, and ensuring timely resolution. If the specified
        issue ID does not exist, a `404 Not Found` error will be returned.
      operationId: retrieveEntity
      parameters:
        - name: id
          in: path
          description: Issue ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
    put:
      tags:
        - Issues
      summary: Update issue entity
      description: >-
        Modify an existing issue within the Property Management System (PMS) by
        providing updated details in the request body. The update process
        requires a valid issue ID and allows modifications to fields such as
        issue status, priority, category, or resolution notes. Issues are
        typically associated with properties, units, bookings, or guest stays,
        ensuring efficient tracking and management. To prevent data conflicts, a
        locking mechanism is applied during updates. The response includes the
        updated issue details. If the issue ID does not exist, a `404 Not Found`
        error will be returned. In case of an unexpected error, a `500 Internal
        Server Error` will be triggered.
      operationId: updateEntity
      parameters:
        - name: id
          in: path
          description: Issue ID
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Issue'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
  /api/v3/issues/{id}/notes:
    get:
      tags:
        - Issues
      summary: Retrieve a list of notes on an issue
      description: >-
        Fetch all notes associated with a specific issue within the Property
        Management System (PMS) using its unique ID. Issue notes provide a
        historical record of updates, comments, and actions taken on maintenance
        requests, guest concerns, or operational issues. The response includes
        details such as note content, author, timestamp, and any relevant
        metadata. This endpoint is useful for tracking communication, ensuring
        accountability, and maintaining an audit trail for issue resolution. If
        the issue ID does not exist, a `404 Not Found` error will be returned.
        In case of an unexpected system error, a `500 Internal Server Error`
        will be triggered.
      operationId: getIssueNotes
      parameters:
        - name: id
          in: path
          description: Issue ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageIssueNote'
    post:
      tags:
        - Issues
      summary: Create an issue note
      description: >-
        Add a new note to a specific issue within the Property Management System
        (PMS) using the issue's unique ID. Issue notes serve as a communication
        log, allowing users to document updates, comments, or actions taken on
        maintenance requests, guest concerns, or operational issues. The request
        body must contain the note details, including its content and any
        relevant metadata. If the specified issue ID does not exist, a `404 Not
        Found` error will be returned. Upon successful creation, the response
        includes the newly added note. This endpoint ensures proper
        documentation of issue progress and facilitates collaboration between
        team members.
      operationId: createIssueNote
      parameters:
        - name: id
          in: path
          description: Issue ID
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IssueNote'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueNote'
  /api/v3/issues/{id}/status:
    put:
      tags:
        - Issues
      summary: Update the status of an issue by ID
      description: >-
        Modify the status of a specific issue within the Property Management
        System (PMS) using its unique issue ID. The request body must include a
        valid status update (`OPEN`, `STARTED`, `RESOLVED`, or `CLOSED`). This
        endpoint ensures proper issue tracking and workflow management by
        allowing users to update the issue's progress. 


        - **OPEN**: Marks the issue as newly created and pending action. 

        - **STARTED**: Indicates work has begun on resolving the issue. 

        - **RESOLVED**: Confirms the issue has been addressed but not yet
        closed. 

        - **CLOSED**: Marks the issue as fully completed and closed. 


        The response includes the updated issue details. If the issue ID does
        not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: updateActivityStatus
      parameters:
        - name: id
          in: path
          description: Issue ID
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StatusUpdateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Issue'
  /api/v3/leads:
    post:
      tags:
        - Leads
      summary: Create a full lead
      description: >-
        Creates a lead with all details provided in the request body. Returns a
        BookingSummaryDTO containing the ID and reference of the created lead.
      operationId: createFullLead
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeadDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingSummaryDTO'
  /api/v3/marketSegments:
    get:
      tags:
        - Market Segments
      summary: Retrieve all market segments
      description: >-
        Fetch a list of all available market segments within the Property
        Management System (PMS). Market segments categorise customer groups
        based on booking patterns, demographics, or business classifications
        such as corporate, leisure, government, or wholesale. This segmentation
        helps optimise pricing strategies, personalise guest experiences, and
        generate meaningful reports for revenue management and marketing. The
        response includes a list of all defined market segments, each with
        relevant metadata. If an unexpected system error occurs, a `500 Internal
        Server Error` will be triggered.
      operationId: listMarketSegments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageMarketSegmentDTO'
  /api/v3/marketSegments/{id}:
    get:
      tags:
        - Market Segments
      summary: Retrieve market segment by ID
      description: >-
        Fetch detailed information about a specific market segment within the
        Property Management System (PMS) using its unique ID. Market segments
        categorise customer groups based on booking behaviors, demographics, or
        business classifications such as corporate, leisure, government, or
        wholesale. This endpoint is useful for retrieving segment-specific data
        for reporting, pricing strategies, and targeted marketing efforts. The
        response includes details about the market segment, including its
        classification and associated metadata. If the specified market segment
        ID does not exist, a `404 Not Found` error will be returned. In case of
        an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getMarketSegmentById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the market segment
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketSegmentDTO'
  /api/v3/nationalities:
    get:
      tags:
        - Nationalities
      summary: Retrieve all nationalities
      description: >-
        Fetch a list of all available nationalities within the Property
        Management System (PMS). Nationality entities help categorise guests,
        customers, or corporate clients based on their country of nationality.
        This data is useful for compliance with regulatory requirements,
        demographic reporting, targeted marketing, and personalised service
        offerings. The response includes a list of all defined nationalities
        along with relevant metadata. If an unexpected system error occurs, a
        `500 Internal Server Error` will be triggered.
      operationId: getNationalities
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageNationalityDTO'
  /api/v3/nationalities/{id}:
    get:
      tags:
        - Nationalities
      summary: Retrieve nationality by ID
      description: >-
        Fetch detailed information about a specific nationality within the
        Property Management System (PMS) using its unique ID. Nationality
        entities help categorise guests, customers, or corporate clients based
        on their country of nationality, supporting compliance, reporting, and
        personalised services. The response includes relevant metadata such as
        country name and ISO codes. If the specified nationality ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getNationalityById
      parameters:
        - name: id
          in: path
          description: Unique identifier
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NationalityDTO'
  /api/v3/notes/categories:
    get:
      tags:
        - Notes
      summary: List Note Categories
      description: >-
        Retrieves a paginated list of all note categories available in the
        system
      operationId: list
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageNoteCategoryDTO'
  /api/v3/organisations:
    get:
      tags:
        - Organisations
      summary: Retrieve list of all organisations
      description: >-
        Fetch a comprehensive list of organisations available within the PMS.
        The response includes details for each cost centre, such as its name,
        unique identifier, and operational status. This endpoint is useful for
        managing organations to different financial elements in the system.
      operationId: listAllOrganisations
      parameters:
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageOrganisationSettingsDTO'
  /api/v3/organisations/{id}:
    get:
      tags:
        - Organisations
      summary: Retrieve organisation by id
      description: >-
        Fetch a specific organisation by its unique identifier. The response
        includes details such as the name, other details. This endpoint is
        useful for retrieving detailed information about a specific cost centre.
      operationId: getById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationSettingsDTO'
  /api/v3/rates:
    get:
      tags:
        - Rates
      summary: Search for rates by specified criteria
      description: >-
        Retrieve a list of rates that match the specified criteria, such as date
        range, unit type, rate ID, company ID, or rate code. The optional
        parameters `dateFrom` and `dateTo` allow for filtering rates within a
        specific date range, while `unitTypeId`, `rateId`, `companyId`, and
        `rateCode` can further narrow the search. Results are returned in a
        paginated format, making it easier to navigate through large datasets.
        This endpoint is useful for querying rates for specific units,
        validating pricing for bookings, or integrating rate information with
        external systems. If no filters are provided, the endpoint returns all
        rates within the default date range.
      operationId: getAllRatesInDateRange
      parameters:
        - name: dateFrom
          in: query
          description: The start date for filtering rates
          required: true
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: The end date for filtering rates
          required: true
          schema:
            type: string
            format: date
        - name: unitTypeId
          in: query
          description: The ID of the unit type
          required: false
          schema:
            type: integer
            format: int64
        - name: rateId
          in: query
          description: The ID of the rate
          required: false
          schema:
            type: integer
            format: int64
        - name: companyId
          in: query
          description: The ID of the company
          required: false
          schema:
            type: integer
            format: int64
        - name: rateCode
          in: query
          description: The code of the rate
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRateDTOExtended'
  /api/v3/rates/{id}:
    get:
      tags:
        - Rates
      summary: Get rate by ID
      description: >-
        Retrieves a specific rate by its unique identifier. Returns basic rate
        information including rate code, type, and name.
      operationId: getRate
      parameters:
        - name: id
          in: path
          description: The ID of the rate to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateDTOBasic'
  /api/v3/rates/{id}/rateSegments:
    get:
      tags:
        - Rates
      summary: Get rate segments for a rate
      description: >-
        Retrieves a paginated list of rate segments for a specific rate within
        the given date range. Returns detailed information about each rate
        segment including pricing and availability.
      operationId: getRateSegments
      parameters:
        - name: id
          in: path
          description: The ID of the rate
          required: true
          schema:
            type: integer
            format: int64
        - name: dateFrom
          in: query
          description: The start date for filtering rate segments
          required: true
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: The end date for filtering rate segments
          required: true
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRateSegmentDTO'
  /api/v3/rates/{id}/unitTypes:
    get:
      tags:
        - Rates
      summary: Get unit types for a rate
      description: >-
        Retrieves a paginated list of unit types associated with a specific
        rate. Returns summary information for each unit type including ID and
        name.
      operationId: getUnitTypes
      parameters:
        - name: id
          in: path
          description: The ID of the rate
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitTypeSummaryDTO'
  /api/v3/rates/{rateId}/segments:
    get:
      tags:
        - Rates
      summary: Retrieve rate segments for a specified rate ID and date range
      description: >-
        Retrieve list of rate summaries for a rate specified by rate ID between
        two dates. This groupstogether rates with similar names and returns the
        rate segments for the specified date range. Allowing for easy comparison
        of rates with different lengths of stay and amounts.
      operationId: getSnapshotOfRate
      parameters:
        - name: rateId
          in: path
          description: The id of the rate for which to retrieve the segments
          required: true
          schema:
            type: integer
            format: int64
        - name: dateFrom
          in: query
          description: The start date for filtering rate segments
          required: true
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: The end date for filtering rate segments
          required: true
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRateSegmentSnapshotDTO'
  /api/v3/referrers:
    get:
      tags:
        - Referrers
      summary: Retrieve list of all referrers
      description: >-
        Fetch a list of all available referrers within the Property Management
        System (PMS). Referrers track sources of referrals for guests, bookings,
        or corporate clients, helping to identify the origin of reservations.
        This data is useful for analysing booking trends, measuring the
        effectiveness of referral channels, and optimising marketing strategies.
        The response includes a list of all defined referrers, each with
        relevant metadata. If an unexpected system error occurs, a `500 Internal
        Server Error` will be triggered.
      operationId: listReferrers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageReferrerDTO'
  /api/v3/referrers/{id}:
    get:
      tags:
        - Referrers
      summary: Retrieve a specific referrer by its ID
      description: >-
        Fetch details of a specific referrer within the Property Management
        System (PMS) using its unique ID. This endpoint returns the referrer
        information, which includes metadata about the source of referrals. If
        the referrer is not found, a `404 Not Found` error will be returned. In
        case of an unexpected system error, a `500 Internal Server Error` will
        be triggered.
      operationId: getReferrerById
      parameters:
        - name: id
          in: path
          description: The unique ID of the referrer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferrerDTO'
  /api/v3/regions:
    get:
      tags:
        - Region
      summary: Retrieve list of regions
      description: >-
        Fetch a paginated list of regions within the Property Management System
        (PMS). Regions help in organizing properties, defining operational
        zones, and generating location-based insights. The response includes a
        list of regions with relevant metadata. If an unexpected system error
        occurs, a `500 Internal Server Error` will be triggered.
      operationId: listAllRegions
      parameters:
        - name: regionName
          in: query
          description: Name of the region to filter by
          required: false
          schema:
            type: string
        - name: countryId
          in: query
          description: ID of the country to filter by
          required: false
          schema:
            type: integer
            format: int64
        - name: countryName
          in: query
          description: Name of the country to filter by
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRegionListItemProjection'
    post:
      tags:
        - Region
      summary: Create a new region
      description: >-
        Creates a new region within the Property Management System (PMS) with
        the provided details. Regions help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for adding new regions to the system for better management and
        reporting. The request body should contain the necessary details for the
        new region. If the creation is successful, the newly created region's
        details will be returned. In case of an unexpected system error, a `500
        Internal Server Error` will be triggered.
      operationId: createRegion
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegionDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegionDTO'
  /api/v3/regions/{id}:
    get:
      tags:
        - Region
      summary: Retrieve a region by Id
      description: >-
        Fetch detailed information about a specific region within the Property
        Management System (PMS) using its unique ID. Regions help in organizing
        properties, defining operational zones, and generating location-based
        insights. This endpoint is useful for retrieving region-specific data
        for reporting, resource allocation, and strategic decision-making. The
        response includes details about the region, including its classification
        and associated metadata. If the specified region ID does not exist, a
        `404 Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getRegionById
      parameters:
        - name: id
          in: path
          description: Unique identifier of the region to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegionDTO'
    put:
      tags:
        - Region
      summary: Update an existing region
      description: >-
        Updates an existing region within the Property Management System (PMS)
        with the provided details. Regions help in organizing properties,
        defining operational zones, and generating location-based insights. This
        endpoint is useful for modifying existing regions to reflect changes in
        geographical areas or operational zones. The request body should contain
        the updated details for the region. If the specified region ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: updateRegion
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegionDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegionDTO'
    delete:
      tags:
        - Region
      summary: Delete a region by Id
      description: >-
        Deletes a specific region within the Property Management System (PMS)
        using its unique ID. Regions help in organizing properties, defining
        operational zones, and generating location-based insights. This endpoint
        is useful for removing regions that are no longer relevant or needed in
        the system. The region will be marked as deleted rather than permanently
        removed to maintain historical data integrity. If the specified region
        ID does not exist, a `404 Not Found` error will be returned. In case of
        an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: deleteRegionById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/roomStays:
    get:
      tags:
        - Room Stays
      summary: Retrieve Room Stays from defined parameters.
      description: >-
        Fetch a paginated list of room stays based on various filters such as
        date, status, and booking details. The response includes a list of room
        stays with relevant metadata. If an unexpected system error occurs, a
        `500 Internal Server Error` will be triggered.
      operationId: listAllRoomStays
      parameters:
        - name: dateFrom
          in: query
          description: Start date for filtering room stays
          required: false
          schema:
            type: string
            format: date
        - name: dateTo
          in: query
          description: End date for filtering room stays
          required: false
          schema:
            type: string
            format: date
        - name: lastUpdatedFrom
          in: query
          description: Filter by last updated timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: lastUpdatedTo
          in: query
          description: Filter by last updated timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: createFrom
          in: query
          description: Filter by creation timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: createdTo
          in: query
          description: Filter by creation timestamp
          required: false
          schema:
            type: string
            format: date-time
        - name: unitId
          in: query
          description: Filter by unit ID
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingContactId
          in: query
          description: Filter by booking contact ID
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingAccountId
          in: query
          description: Filter by booking account ID
          required: false
          schema:
            type: integer
            format: int64
        - name: billingAccountId
          in: query
          description: Filter by billing account ID
          required: false
          schema:
            type: integer
            format: int64
        - name: statuses
          in: query
          description: Filter by statuses
          required: false
          schema:
            type: array
            items:
              type: string
            default:
              - CONFIRMED
              - CHECKED_IN
              - CHECKED_OUT
        - name: bookingReference
          in: query
          description: Filter by booking reference
          required: false
          schema:
            type: string
        - name: channelId
          in: query
          description: Filter by channel ID
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingId
          in: query
          description: Filter by booking ID
          required: false
          schema:
            type: integer
            format: int64
        - name: otaReference
          in: query
          description: >-
            The ota reference is the booking reference provided by the online
            travel agent and should match the reference shown on the customer’s
            confirmation from the 3rd party
          required: false
          schema:
            type: string
        - name: customerReference
          in: query
          description: Customer reference of booking
          required: false
          schema:
            type: string
        - name: organisationSettingsId
          in: query
          description: Filter by organisation settings ID
          required: false
          schema:
            type: integer
            format: int64
        - name: bookingTypeId
          in: query
          description: Filter by booking type ID
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageBookingRoomStayListItemProjection'
  /api/v3/roomStays/roomStays/{id}/lock:
    patch:
      tags:
        - Room Stays
      summary: Lock a specified roomstay
      description: >-
        Locks the room stay identified by the given ID, preventing further
        modifications. This operation is useful for ensuring that the details of
        a room stay are finalized and cannot be altered. If the specified room
        stay ID does not exist, a `404 Not Found` error will be returned. In
        case of an unexpected system error, a `500 Internal Server Error` will
        be triggered.
      operationId: roomStayApiLockRoomStay
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to lock
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomStayDTO'
  /api/v3/roomStays/{id}:
    get:
      tags:
        - Room Stays
      summary: Retrieve Room Stay by id
      description: >-
        Fetch detailed information about a specific room stay within the
        Property Management System (PMS) using its unique ID. Room stays help in
        organizing bookings, ensuring accurate billing, and enhancing the
        overall guest experience. This endpoint is useful for retrieving room
        stay-specific data for reporting, resource allocation, and strategic
        decision-making. The response includes details about the room stay,
        including its duration, associated guests, and any additional services
        or charges. If the specified room stay ID does not exist, a `404 Not
        Found` error will be returned. In case of an unexpected system error, a
        `500 Internal Server Error` will be triggered.
      operationId: getRoomStayById
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomStayDTO'
  /api/v3/roomStays/{id}/activities:
    get:
      tags:
        - Room Stays
      summary: Retrieve activities for specified room stay
      description: >-
        Fetch a list of all activities associated with a specific room stay.
        This endpoint is useful for retrieving detailed information about
        activities related to a room stay. If the specified room stay ID does
        not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getActivitiesByRoomStayId
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to retrieve activities for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageActivityDTO'
  /api/v3/roomStays/{id}/chargeableExtras:
    get:
      tags:
        - Room Stays
      summary: Retrieve extras for specified room stay
      description: >-
        Fetch a list of all chargeable extras associated with a specific room
        stay. This endpoint is useful for retrieving detailed information about
        additional services or charges applied to a room stay. If the specified
        room stay ID does not exist, a `404 Not Found` error will be returned.
        In case of an unexpected system error, a `500 Internal Server Error`
        will be triggered.
      operationId: getRoomStayExtrasByRoomStayId
      parameters:
        - name: id
          in: path
          description: >-
            The unique identifier of the room stay to retrieve chargeable extras
            for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageRoomStayExtraDTO'
    post:
      tags:
        - Room Stays
      summary: Create a room stay extra
      description: 'This endpoint is used to create a new room stay extra. '
      operationId: createRoomStayExtra
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRoomStayExtraDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomStayExtraDTO'
  /api/v3/roomStays/{id}/customFields:
    get:
      tags:
        - Room Stays
      summary: Get custom fields for a room stay
      description: >-
        Retrieve all custom fields associated with a specific room stay record.
        The response includes a list of custom fields, each containing details
        such as field name, type, and value. This endpoint is useful for
        accessing additional information stored in custom fields that are not
        part of the standard room stay attributes.
      operationId: getCustomFieldsForRoomStay
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageCustomFieldDTO'
  /api/v3/roomStays/{id}/guestStays:
    get:
      tags:
        - Room Stays
      summary: Retrieve guest stays for specified room stay
      description: >-
        Fetch a list of all guest stays associated with a specific room stay.
        This endpoint is useful for retrieving detailed information about guests
        staying in a room. If the specified room stay ID does not exist, a `404
        Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getGuestStaysByRoomStayId
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to retrieve guest stays for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageGuestStayDTO'
  /api/v3/roomStays/{id}/guests:
    get:
      tags:
        - Room Stays
      summary: Retrieve guests for specified room stay
      description: >-
        Fetch a list of all guests associated with a specific room stay. This
        endpoint is useful for retrieving detailed information about guests
        staying in a room. If the specified room stay ID does not exist, a `404
        Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getGuestsByRoomStayId
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to retrieve guest stays for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageContactDTO'
  /api/v3/roomStays/{id}/salesInvoiceItems:
    get:
      tags:
        - Room Stays
      summary: Retrieve list of all invoice items for specified room stay
      description: >-
        Fetch a list of all invoice items associated with a specific room stay.
        This endpoint is useful for retrieving detailed billing information for
        a room stay, including charges for services and any additional fees. If
        the specified room stay ID does not exist, a `404 Not Found` error will
        be returned. In case of an unexpected system error, a `500 Internal
        Server Error` will be triggered.
      operationId: getInvoicesByRoomStayId
      parameters:
        - name: id
          in: path
          description: The unique identifier of the room stay to retrieve invoice items for
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageSalesInvoiceItemDTO'
  /api/v3/salesInvoices:
    get:
      tags:
        - Sales Invoices
      summary: Retrieve a list of all invoices
      description: >-
        Fetch a list of all sales invoices within the Property Management System
        (PMS). This endpoint is useful for retrieving detailed information about
        sales transactions, including invoice dates, associated organizations,
        and statuses. The response includes paginated results of sales invoices,
        which can be filtered by date range, organization ID, and status. If no
        invoices match the specified criteria, an empty list will be returned.
        In case of an unexpected system error, a `500 Internal Server Error`
        will be triggered.
      operationId: findSalesInvoices
      parameters:
        - name: dateFrom
          in: query
          description: Start date for filtering invoices
          required: false
          schema:
            type: string
            format: date
          example: '2023-01-01'
        - name: dateTo
          in: query
          description: End date for filtering invoices
          required: false
          schema:
            type: string
            format: date
          example: '2023-12-31'
        - name: organisationId
          in: query
          description: ID of the organization to filter invoices by
          required: false
          schema:
            type: integer
            format: int64
          example: 123
        - name: status
          in: query
          description: Status of the invoices to filter by, must be [DRAFT, POSTED, VOID]
          required: false
          schema:
            type: string
            enum:
              - DRAFT
              - VOID
              - POSTED
          example: POSTED
        - name: exportStatuses
          in: query
          description: >-
            List of export statuses to filter by, must be [SKIPPED, CREATED,
            PENDING, SENT, EXPORTED, FAILED, IMPORTED]
          required: false
          schema:
            type: array
            items:
              type: string
          example: EXPORTED
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageSalesInvoiceListItemProjection'
  /api/v3/salesInvoices/salesInvoiceItems/{id}:
    get:
      tags:
        - Sales Invoices
      summary: Retrieve a single invoice item
      description: >-
        Fetch detailed information about a specific sales invoice item within
        the Property Management System (PMS) using its unique ID. Sales invoice
        items are essential for tracking individual components of sales
        transactions, including item descriptions, quantities, and prices. This
        endpoint is useful for retrieving item-specific data for reporting,
        auditing, and financial analysis. If the specified sales invoice item ID
        does not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: findInvoiceItem
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SalesInvoiceItemDTO'
  /api/v3/salesInvoices/{id}:
    get:
      tags:
        - Sales Invoices
      summary: Retrieve a single invoice
      description: >-
        Fetch detailed information about a specific sales invoice within the
        Property Management System (PMS) using its unique ID. Sales invoices are
        essential for tracking sales transactions, generating financial reports,
        and ensuring accurate billing. This endpoint is useful for retrieving
        invoice-specific data for reporting, auditing, and financial analysis.
        The response includes details about the sales invoice, including its
        date, associated organization, status, and line items. If the specified
        sales invoice ID does not exist, a `404 Not Found` error will be
        returned. In case of an unexpected system error, a `500 Internal Server
        Error` will be triggered.
      operationId: findInvoice
      parameters:
        - name: id
          in: path
          description: ID of the sales invoice to retrieve
          required: true
          schema:
            type: integer
            format: int64
          example: 123
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SalesInvoiceDTO'
  /api/v3/salesInvoices/{id}/customFields:
    get:
      tags:
        - Sales Invoices
      summary: Get custom fields for a sales invoices
      description: >-
        Retrieve all custom fields associated with a specific sales invoice
        record in the finance module of the PMS. The response includes a list of
        custom fields, each containing details such as field name, type, and
        value. This endpoint is useful for accessing additional information
        stored in custom fields that are not part of the standard sales invoice
        attributes.
      operationId: getCustomFieldsForSalesInvoice
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /api/v3/salesInvoices/{id}/exported:
    patch:
      tags:
        - Sales Invoices
      summary: Update an invoice as Exported to an external finance system
      description: >-
        Mark a specific sales invoice as exported to an external finance system
        using its unique ID. This operation is essential for synchronizing the
        invoice status with external financial systems, ensuring that the
        invoice is recognized as exported. The request body should include the
        external ID and the exported date. If the specified sales invoice ID
        does not exist, a `404 Not Found` error will be returned. If the invoice
        is not in the 'POSTED' status, a `400 Bad Request` error will be
        returned. In case of an unexpected system error, a `500 Internal Server
        Error` will be triggered.
      operationId: markAsExported
      parameters:
        - name: id
          in: path
          description: ID of the sales invoice to mark as exported
          required: true
          schema:
            type: integer
            format: int64
          example: 123
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinancialUpdateDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SalesInvoiceDTO'
  /api/v3/salesInvoices/{id}/post:
    put:
      tags:
        - Sales Invoices
      summary: Mark invoice as posted
      description: >-
        Mark a specific sales invoice as posted using its unique ID. This
        operation is essential for updating the invoice status to 'POSTED',
        indicating that the invoice has been finalized and is ready for further
        processing. If the specified sales invoice ID does not exist, a `404 Not
        Found` error will be returned. If the invoice is already in the 'POSTED'
        status, a `400 Bad Request` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: markSalesInvoicePosted
      parameters:
        - name: id
          in: path
          description: ID of the sales invoice to mark as posted
          required: true
          schema:
            type: integer
            format: int64
          example: 123
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SalesInvoiceDTO'
  /api/v3/salesInvoices/{id}/salesInvoiceItems:
    get:
      tags:
        - Sales Invoices
      summary: Retrieve all sales invoice items for a specific invoice
      description: >-
        Fetch all sales invoice items associated with a specific sales invoice
        using its unique ID. This endpoint is useful for retrieving detailed
        information about the items within a sales invoice, including item
        descriptions, quantities, and prices. If the specified sales invoice ID
        does not exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: findInvoiceItems
      parameters:
        - name: id
          in: path
          description: ID of the sales invoice to retrieve items for
          required: true
          schema:
            type: integer
            format: int64
          example: 123
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageSalesInvoiceItemDTO'
  /api/v3/salesInvoices/{id}/updateSalesInvoiceExportStatus:
    patch:
      tags:
        - Sales Invoices
      summary: >-
        Update an invoice to a given status in relation to an external finance
        system
      description: >-
        Update the external identifier record linked to a specific sales
        invoice; the updateable fields are export status, external ID and
        exported date time. This operation is essential for synchronizing the
        invoice export status with external financial systems, ensuring that the
        invoice export status is maintained in line with the integrated external
        system. The request body should include the external ID, export status
        and the exported date. If the specified sales invoice ID does not exist,
        a `404 Not Found` error will be returned. If the invoice is not in the
        'POSTED' status, a `400 Bad Request` error will be returned. In case of
        an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: updateSalesInvoiceExportStatus
      parameters:
        - name: id
          in: path
          description: ID of the sales invoice to update the export status of
          required: true
          schema:
            type: integer
            format: int64
          example: 123
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalIdentifierUpdateDTO'
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /api/v3/tags:
    get:
      tags:
        - Tags
      summary: Retrieve all Tags
      description: >-
        Fetch a list of all tags within the Property Management System (PMS).
        This endpoint is useful for retrieving detailed information about tags,
        including their names and descriptions. The response includes a list of
        tags, which can be used for categorizing and organizing various system
        entities. If no tags are found, an empty list will be returned. In case
        of an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: listTags
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageTagDTO'
  /api/v3/tags/{id}:
    get:
      tags:
        - Tags
      summary: Retrieve tags using specified ID
      description: >-
        Fetch detailed information about a specific tag within the Property
        Management System (PMS) using its unique ID. Tags are essential for
        categorizing and organizing various system entities, such as properties,
        bookings, guests, accounts, and other records. This endpoint is useful
        for retrieving tag-specific data for reporting, auditing, and data
        management purposes. The response includes details about the tag,
        including its name and description. If the specified tag ID does not
        exist, a `404 Not Found` error will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getTagtById
      parameters:
        - name: id
          in: path
          description: The unique ID of the tag
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagDTO'
  /api/v3/teams:
    get:
      tags:
        - Teams
      summary: Search for Team entities
      description: >-
        Retrieve a paginated list of teams within the Property Management System
        (PMS) based on optional search criteria. You can filter the results by
        team name using a query parameter (`teamName`), which supports partial
        matches with wildcards. The response includes a paginated list of team
        records, each containing basic details such as the team's name and key
        attributes. This endpoint is useful for browsing and managing multiple
        teams, enabling efficient search and navigation across large datasets.
        If no search criteria are provided, all teams will be returned in the
        response.
      operationId: searchTeams
      parameters:
        - name: teamName
          in: query
          description: The name of the team to search for
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageTeamListItemProjection'
  /api/v3/teams/{id}:
    get:
      tags:
        - Teams
      summary: Retrieve team entity by ID
      description: >-
        Fetch detailed information about a specific team within the Property
        Management System (PMS) by providing its unique ID. The response
        includes information such as the team's name, members, assigned roles,
        permissions, and any associated properties or tasks. This endpoint is
        useful for managing team configurations, reviewing responsibilities, or
        retrieving team-specific details for operational purposes. If the team
        ID does not exist, an appropriate error response will be returned.
      operationId: findTeam
      parameters:
        - name: id
          in: path
          description: The unique identifier of the team entity
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamDTO'
  /api/v3/unitAccessGroups:
    get:
      tags:
        - Unit Access Groups
      summary: Retrieve list of Unit Access Groups
      description: >-
        Fetch a list of all unit access groups within the Property Management
        System (PMS). This endpoint is useful for retrieving detailed
        information about unit access groups, including their associated units
        and access group names. The response includes a paginated list of unit
        access groups, which can be used for managing access control and
        permissions. If no unit access groups are found, an empty list will be
        returned. In case of an unexpected system error, a `500 Internal Server
        Error` will be triggered.
      operationId: listAllUnitAccessGroups
      parameters:
        - name: unitId
          in: query
          description: Unit Id
          required: false
          schema:
            type: integer
            format: int64
        - name: accessGroupName
          in: query
          description: Access Group Name
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitAccessGroupProjection'
    put:
      tags:
        - Unit Access Groups
      summary: Update a unit access group
      description: >-
        Update an existing unit access group within the Property Management
        System (PMS). This endpoint allows the modification of details for a
        specific unit access group, including its associated unit and access
        group information. The request body must include the updated details of
        the unit access group. The response includes the updated unit access
        group details. If the specified unit access group ID does not exist, a
        `404 Not Found` error will be returned. In case of validation errors, a
        `400 Bad Request` error will be returned. In case of an unexpected
        system error, a `500 Internal Server Error` will be triggered.
      operationId: updateUnitAccessGroup
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitAccessGroupDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitAccessGroupDTO'
    post:
      tags:
        - Unit Access Groups
      summary: Create a new Access Group
      description: >-
        Create a new unit access group within the Property Management System
        (PMS). This endpoint allows the creation of a new unit access group,
        which links a unit to an access group. The request body must include
        details of the unit and the access group. The response includes the
        newly created unit access group details. In case of validation errors, a
        `400 Bad Request` error will be returned. In case of an unexpected
        system error, a `500 Internal Server Error` will be triggered.
      operationId: createUnitAccessGroup
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitAccessGroupDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitAccessGroupDTO'
  /api/v3/unitAccessGroups/{id}:
    get:
      tags:
        - Unit Access Groups
      summary: Retrieve an Unit Access Group by Id
      description: >-
        Fetch detailed information about a specific unit access group within the
        Property Management System (PMS) using its unique ID. Unit access groups
        are essential for managing access control and permissions for unit
        entities. This endpoint is useful for retrieving unit access
        group-specific data for reporting, auditing, and data management
        purposes. The response includes details about the unit access group,
        including its associated unit and access group names. If the specified
        unit access group ID does not exist, a `404 Not Found` error will be
        returned. In case of an unexpected system error, a `500 Internal Server
        Error` will be triggered.
      operationId: getUnitAccessGroupById
      parameters:
        - name: id
          in: path
          description: Unit Access Group Id
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitAccessGroupDTO'
  /api/v3/unitContracts:
    get:
      tags:
        - Unit Contracts
      summary: Search unit contracts
      description: >-
        Search for unit contracts with optional filtering by unit ID and
        building ID
      operationId: searchUnitContracts
      parameters:
        - name: unitId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: buildingId
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitContractDTO'
  /api/v3/unitContracts/{id}:
    get:
      tags:
        - Unit Contracts
      summary: Get unit contract by ID
      description: Retrieve detailed information about a specific unit contract
      operationId: getUnitContract
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitContractDTO'
  /api/v3/unitContracts/{id}/units:
    get:
      tags:
        - Unit Contracts
      summary: Get units for contract
      description: Retrieve all units associated with a specific unit contract
      operationId: getUnits
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitDTO'
  /api/v3/unitLocations:
    get:
      tags:
        - Unit Locations
      summary: Retrieve unit locations
      description: >-
        Fetches a paginated list of unit locations within the Property
        Management System (PMS). This endpoint allows filtering by unit ID,
        building ID to retrieve specific unit locations and also, unit location
        last updated date time. Unit locations represent different areas or
        spaces within a unit (e.g., bathrooms, living spaces). The response
        includes location details such as type, description, and associated
        metadata. If no locations are found for the specified filters, an empty
        page will be returned. Results are paginated to handle large datasets
        efficiently.
      operationId: getUnitLocations
      parameters:
        - name: unitId
          in: query
          description: ID of the unit to filter locations
          required: false
          schema:
            type: integer
            format: int64
        - name: buildingId
          in: query
          description: ID of the building to filter locations
          required: false
          schema:
            type: integer
            format: int64
        - name: lastUpdatedAfter
          in: query
          description: Last Updated Date - filter locations last updated after this value
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitInternalLocationDTO'
  /api/v3/unitLocations/{id}:
    get:
      tags:
        - Unit Locations
      summary: Retrieve unit location by ID
      description: >-
        Fetches a specific unit location by its unique identifier. This endpoint
        provides detailed information about a particular unit location,
        including its type, associated unit, and other relevant metadata. If the
        specified unit location ID does not exist, a not found error will be
        returned.
      operationId: getUnitLocationById
      parameters:
        - name: id
          in: path
          description: ID of the unit location to retrieve
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitInternalLocationDTO'
  /api/v3/unitTypes:
    get:
      tags:
        - Unit Types
      summary: Get all unit types
      description: >-
        Fetch a list of all unit types within the Property Management System
        (PMS). This endpoint is useful for retrieving detailed information about
        unit types, including their classification and characteristics such as
        size, layout, amenities, and occupancy capacity. The response includes a
        paginated list of unit types, which can be used for inventory
        management, pricing strategies, availability searches, and reporting. If
        no unit types are found, an empty list will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getAllUnitTypes
      parameters:
        - name: unitTypeName
          in: query
          description: The name of the unit type
          required: false
          schema:
            type: string
        - name: buildingName
          in: query
          description: The name of the building
          required: false
          schema:
            type: string
        - name: buildingId
          in: query
          description: The ID of the building
          required: false
          schema:
            type: integer
            format: int64
        - name: developmentName
          in: query
          description: The name of the development
          required: false
          schema:
            type: string
        - name: developmentId
          in: query
          description: The ID of the development
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitTypeListItemProjection'
    post:
      tags:
        - Unit Types
      summary: Create a new unit type
      description: >-
        Create a new unit type within the Property Management System (PMS). This
        endpoint allows you to define a new unit type with its classification
        and characteristics such as size, layout, amenities, and occupancy
        capacity. The request body should contain the details of the unit type
        to be created. If the creation is successful, the newly created unit
        type will be returned. In case of validation errors or unexpected system
        errors, appropriate error responses will be triggered.
      operationId: createUnitType
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitTypeDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitTypeDTO'
  /api/v3/unitTypes/{id}:
    get:
      tags:
        - Unit Types
      summary: Retrieve a unit type by Id
      description: >-
        Fetch detailed information about a specific unit type within the
        Property Management System (PMS) using its unique ID. Unit types are
        essential for categorizing accommodations based on factors such as size,
        layout, amenities, and occupancy capacity. This endpoint is useful for
        retrieving unit type-specific data for inventory management, pricing
        strategies, availability searches, and reporting. The response includes
        details about the unit type, including its classification and
        characteristics. If the specified unit type ID does not exist, a `404
        Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getUnitTypeById
      parameters:
        - name: id
          in: path
          description: The unique identifier of the unit type
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitTypeDTO'
    put:
      tags:
        - Unit Types
      summary: Update an existing unit type
      description: >-
        Update an existing unit type within the Property Management System
        (PMS). This endpoint allows you to modify the details of a unit type,
        including its classification and characteristics such as size, layout,
        amenities, and occupancy capacity. The request body should contain the
        updated details of the unit type. If the update is successful, the
        updated unit type will be returned. In case of validation errors or
        unexpected system errors, appropriate error responses will be triggered.
      operationId: updateUnitType
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitTypeDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitTypeDTO'
    delete:
      tags:
        - Unit Types
      summary: Delete a unit type by ID
      description: >-
        Delete a specific unit type within the Property Management System (PMS)
        using its unique ID. This endpoint allows you to remove a unit type,
        including all associated data. If the deletion is successful, a `204 No
        Content` response will be returned. If the specified unit type ID does
        not exist, a `404 Not Found` error will be returned. In case of
        unexpected system errors during the deletion process, a `500 Internal
        Server Error` will be triggered.
      operationId: deleteUnitTypeById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/unitTypes/{id}/featuresFacilities:
    get:
      tags:
        - Unit Types
      summary: Retrieve features and facilities for a unit type
      description: >-
        Fetch the list of features and facilities associated with a specific
        unit type within the Property Management System (PMS). This endpoint
        provides detailed information about the amenities and characteristics
        available for a particular unit type. The response includes a
        comprehensive list of features and facilities that help define the unit
        type's offerings. If the specified unit type ID does not exist, a `404
        Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: getFeatureFacilities
      parameters:
        - name: id
          in: path
          description: The unique identifier of the unit type
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageFeatureFacilityDTO'
    put:
      tags:
        - Unit Types
      summary: Update (replace) feature facilities for a unit type
      description: >-
        Update the list of feature facilities associated with a specific unit
        type using its unique ID. This endpoint allows you to replace the
        existing feature facilities with a new set of facilities, updating the
        unit type's amenities and services. The request body should contain a
        list of feature facility IDs to be linked. If the specified unit type ID
        does not exist, a `404 Not Found` error will be returned. In case of
        system errors during the update process, a `500 Internal Server Error`
        will be triggered.
      operationId: updateFeatureFacilities
      parameters:
        - name: id
          in: path
          description: The unique identifier of the unit type
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/unitTypes/{id}/featuresFacilities/link:
    post:
      tags:
        - Unit Types
      summary: Link (add) feature facilities to a unit type
      description: >-
        Link existing feature facilities to a specific unit type using its
        unique ID. This endpoint allows you to associate multiple feature
        facilities with a unit type, enhancing its amenities and services. The
        request body should contain a list of feature facility IDs to be linked.
        If the specified unit type ID does not exist, a `404 Not Found` error
        will be returned. In case of system errors during the linking process, a
        `500 Internal Server Error` will be triggered.
      operationId: linkFacilitiesToUnitType
      parameters:
        - name: id
          in: path
          description: The unique identifier of the unit type
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/unitTypes/{id}/featuresFacilities/unlink:
    post:
      tags:
        - Unit Types
      summary: Unlink (remove) feature facilities from a unit type
      description: >-
        Unlink existing feature facilities from a specific unit type using its
        unique ID. This endpoint allows you to remove multiple feature
        facilities from a unit type, updating its amenities and services. The
        request body should contain a list of feature facility IDs to be
        unlinked. If the specified unit type ID does not exist, a `404 Not
        Found` error will be returned. In case of system errors during the
        unlinking process, a `500 Internal Server Error` will be triggered.
      operationId: deleteFeatureFacilities
      parameters:
        - name: id
          in: path
          description: The unique identifier of the unit type
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdsListDTO'
        required: true
      responses:
        '200':
          description: OK
  /api/v3/unitTypes/{id}/images:
    get:
      tags:
        - Unit Types
      summary: Retrieve unit type images
      description: >-
        Fetch a paginated list of images associated with a specific unit type
        using its unique ID. This endpoint allows you to retrieve images that
        are linked to the unit type, which can include photos of the property,
        architectural designs, or other relevant visuals. The response includes
        image details such as file name, size, and type. If the specified
        development ID does not exist, a `404 Not Found` error will be returned.
        In case of system errors during retrieval, a `500 Internal Server Error`
        will be triggered.
      operationId: getImages
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitTypeImageDTO'
  /api/v3/unitTypes/{id}/images/upload:
    post:
      tags:
        - Unit Types
      summary: Upload a new unit type image
      description: >-
        Upload a new image for a specific unit type using its unique ID. This
        endpoint allows you to add images that are linked to the unit type,
        which can include photos of the property, architectural designs, or
        other relevant visuals. The uploaded file should be provided as a
        multipart file in the request. If the specified development ID does not
        exist, a `404 Not Found` error will be returned. In case of system
        errors during the upload process, a `500 Internal Server Error` will be
        triggered.
      operationId: createNewImage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              required:
                - file
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitTypeImageDTO'
  /api/v3/unitTypes/{id}/images/{imageId}:
    delete:
      tags:
        - Unit Types
      summary: Delete a unit type image by ID
      description: >-
        Delete an existing image associated with a specific unit type using its
        unique ID. This endpoint allows you to remove an image that is linked to
        the unit type. If the specified development or image ID does not exist,
        a `404 Not Found` error will be returned. In case of system errors
        during the deletion process, a `500 Internal Server Error` will be
        triggered.
      operationId: deleteImage
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: imageId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/units:
    get:
      tags:
        - Units
      summary: Retrieve list of units
      description: >-
        Fetch a list of all units within the Property Management System (PMS).
        This endpoint is useful for retrieving detailed information about units,
        including their availability, capacity, amenities, and pricing. The
        response includes a paginated list of units, which can be used for
        inventory management, booking operations, and property administration.
        If no units are found, an empty list will be returned. In case of an
        unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: listAllProperties
      parameters:
        - name: buildingId
          in: query
          description: Filter by building name
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitListItemProjection'
    post:
      tags:
        - Units
      summary: Create a new unit
      description: >-
        Create a new unit within the Property Management System (PMS). This
        endpoint allows property managers to add new units, which can include
        apartments, hotel rooms, or other types of rentable spaces. The request
        body should contain the necessary details for the unit, such as its
        type, capacity, amenities, and pricing. Upon successful creation, the
        response will include the details of the newly created unit. In case of
        an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: createUnit
      parameters:
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitDTO'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitDTO'
  /api/v3/units/{id}:
    get:
      tags:
        - Units
      summary: Retrieve a unit by Id
      description: >-
        Fetch detailed information about a specific unit within the Property
        Management System (PMS) using its unique ID. Units are essential for
        categorizing accommodations based on factors such as availability,
        capacity, amenities, and pricing. This endpoint is useful for retrieving
        unit-specific data for inventory management, booking operations, and
        property administration. The response includes details about the unit,
        including its classification and characteristics. If the specified unit
        ID does not exist, a `404 Not Found` error will be returned. In case of
        an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getUnitById
      parameters:
        - name: id
          in: path
          description: Unit ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitDTO'
    put:
      tags:
        - Units
      summary: Update a unit by Id
      description: >-
        Update the details of a specific unit within the Property Management
        System (PMS) using its unique ID. This endpoint allows property managers
        to modify unit attributes such as availability, capacity, amenities, and
        pricing. The request body should contain the updated details for the
        unit. Upon successful update, the response will include the updated unit
        information. If the specified unit ID does not exist, a `404 Not Found`
        error will be returned. In case of an unexpected system error, a `500
        Internal Server Error` will be triggered.
      operationId: updateUnit
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: currentUser
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/RerumUserDetails'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitDTO'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnitDTO'
    delete:
      tags:
        - Units
      summary: Delete a unit by Id
      description: >-
        Delete a specific unit within the Property Management System (PMS) using
        its unique ID. This endpoint allows property managers to remove units
        that are no longer needed, such as apartments, hotel rooms, or other
        types of rentable spaces. Upon successful deletion, a `204 No Content`
        response will be returned. If the specified unit ID does not exist, a
        `404 Not Found` error will be returned. In case of an unexpected system
        error, a `500 Internal Server Error` will be triggered.
      operationId: deleteUnitById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
  /api/v3/units/{id}/accessGroups:
    get:
      tags:
        - Units
      summary: Retrieve list of unit access groups
      description: >-
        Fetch a list of all access groups associated with a specific unit within
        the Property Management System (PMS) using its unique ID. Access groups
        define the permissions and access levels for different users or roles
        within the unit. This endpoint is useful for retrieving detailed
        information about the access groups assigned to a unit, including their
        names, descriptions, and associated permissions. The response includes a
        list of access groups, which can be used for managing user access,
        security settings, and role-based permissions. If no access groups are
        found for the specified unit ID, an empty list will be returned. In case
        of an unexpected system error, a `500 Internal Server Error` will be
        triggered.
      operationId: getUnitUnitAccessGroups
      parameters:
        - name: id
          in: path
          description: Unit ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitAccessGroupDTO'
  /api/v3/units/{id}/customFields:
    get:
      tags:
        - Units
      summary: Get custom fields for a unit
      description: >-
        Retrieve all custom fields associated with a specific unit record in the
        property module of the PMS. The response includes a list of custom
        fields, each containing details such as field name, type, and value.
        This endpoint is useful for accessing additional information stored in
        custom fields that are not part of the standard unit attributes.
      operationId: getCustomFieldsForUnt
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Successful response
          content:
            application/json: {}
  /api/v3/units/{unitId}/unitContracts:
    get:
      tags:
        - Units
      summary: Retrieve contracts for a specific unit
      description: >-
        Fetch a paginated list of contracts associated with a specific unit
        within the Property Management System (PMS). This endpoint allows
        property managers to retrieve detailed information about the contracts
        related to a unit, including contract terms, start and end dates, and
        associated parties. If no contracts are found for the specified unit ID,
        an empty page will be returned. Results are paginated to handle large
        datasets efficiently.
      operationId: getUnitContracts
      parameters:
        - name: unitId
          in: path
          description: Unit ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitContractDTO'
  /api/v3/units/{unitId}/unitLocations:
    get:
      tags:
        - Units
      summary: Retrieve internal locations for a specific unit
      description: >-
        Fetch a paginated list of internal locations associated with a specific
        unit within the Property Management System (PMS). Internal locations
        represent different areas or spaces within a unit, such as bathrooms,
        living spaces, etc. This endpoint allows property managers to retrieve
        detailed information about the internal locations of a unit, including
        their types, descriptions, and associated metadata. If no internal
        locations are found for the specified unit ID, an empty page will be
        returned. Results are paginated to handle large datasets efficiently.
      operationId: getUnitInternalLocations
      parameters:
        - name: unitId
          in: path
          description: Unit ID
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUnitInternalLocationDTO'
  /api/v3/users:
    get:
      tags:
        - Users
      summary: Search for User entities
      description: >-
        This endpoint allows searching for user entities based on various
        criteria such as username, first name, and last name. It returns a
        paginated list of user projections in JSON format. The search parameters
        are optional and can be combined to narrow down the search results.
      operationId: searchUsers
      parameters:
        - name: userName
          in: query
          description: The username of the user entity
          required: false
          schema:
            type: string
        - name: firstName
          in: query
          description: The first name of the user entity
          required: false
          schema:
            type: string
        - name: lastName
          in: query
          description: The last name of the user entity
          required: false
          schema:
            type: string
        - name: pageable
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiPageUserListItemProjection'
  /api/v3/users/{id}:
    get:
      tags:
        - Users
      summary: Retrieve user entity by id
      description: >-
        This endpoint retrieves a user entity based on the provided user ID. It
        returns the user details in JSON format. The user ID must be specified
        in the URL path.
      operationId: findUser
      parameters:
        - name: id
          in: path
          description: The unique identifier of the user entity
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDTO'
components:
  schemas:
    CostCentreDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the cost centre
          format: int64
        code:
          type: string
          description: Code of the cost centre
        name:
          type: string
          description: Name of the cost centre
        exportName:
          type: string
          description: Export name of the cost centre
      description: Data Transfer Object representing a cost centre
    CountryDTO:
      required:
        - countryCodeAlpha2
        - countryCodeAlpha3
        - countryCodeNumeric
        - name
        - sortOrder
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the country
          format: int64
        name:
          type: string
          description: Name of the country
        sortOrder:
          type: integer
          description: Sort order of the country
          format: int32
        countryCodeAlpha2:
          type: string
          description: Alpha-2 country code
        countryCodeAlpha3:
          type: string
          description: Alpha-3 country code
        countryCodeNumeric:
          type: string
          description: Numeric country code
      description: >-
        Data Transfer Object representing a Country entity in the Property
        Management System (PMS).
    UnitAddressDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the address
          format: int64
        addressLine1:
          type: string
          description: First line of the address
        addressLine2:
          type: string
          description: Second line of the address
        addressLine3:
          type: string
          description: Third line of the address
        city:
          type: string
          description: City of the address
        postCode:
          type: string
          description: Postal code of the address
        country:
          $ref: '#/components/schemas/CountryDTO'
      description: Data Transfer Object representing a unit's address
    UnitDTO:
      required:
        - bookable
        - name
        - occupancyFrom
        - occupancyTo
        - organisationId
        - publish
        - sellableFrom
        - sellableTo
        - shortDescription
        - sortOrder
        - unitAddress
        - unitCostCentre
        - unitType
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the unit
          format: int64
        unitAddress:
          $ref: '#/components/schemas/UnitAddressDTO'
        unitType:
          $ref: '#/components/schemas/UnitTypeSummaryDTO'
        name:
          type: string
          description: Name of the unit
        shortDescription:
          type: string
          description: Short description of the unit
        bookable:
          type: boolean
          description: Indicates if the unit is bookable
        sellableFrom:
          type: string
          description: Date from which the unit is sellable
          format: date
        sellableTo:
          type: string
          description: Date until which the unit is sellable
          format: date
        addedOn:
          type: string
          description: Date when the unit was added
          format: date
        removedOn:
          type: string
          description: Date when the unit was removed
          format: date
        directions:
          type: string
          description: Directions to the unit
        costCentre:
          type: string
          description: Cost centre of the unit
        sortOrder:
          type: integer
          description: Sort order of the unit
          format: int32
        publish:
          type: boolean
          description: Indicates if the unit is published
        externalId:
          type: integer
          description: External identifier of the unit
          format: int64
        identifier:
          type: string
          description: Identifier of the unit
        floor:
          type: integer
          description: Floor number of the unit
          format: int32
        floorSpace:
          type: integer
          description: Floor space of the unit
          format: int32
        shortDescriptionLang2:
          type: string
          description: Short description of the unit in second language
        shortDescriptionLang3:
          type: string
          description: Short description of the unit in third language
        shortDescriptionLang4:
          type: string
          description: Short description of the unit in fourth language
        shortDescriptionLang5:
          type: string
          description: Short description of the unit in fifth language
        directionsLang2:
          type: string
          description: Directions to the unit in second language
        directionsLang3:
          type: string
          description: Directions to the unit in third language
        directionsLang4:
          type: string
          description: Directions to the unit in fourth language
        directionsLang5:
          type: string
          description: Directions to the unit in fifth language
        primaryLockIdentifier:
          type: string
          description: Primary lock identifier of the unit
        occupancyFrom:
          type: string
          description: Date from which the unit is occupied
          format: date
        occupancyTo:
          type: string
          description: Date until which the unit is occupied
          format: date
        pricePerExtraGuest:
          type: number
          description: Price per extra guest for the unit
        standardOccupancy:
          type: integer
          description: Standard occupancy of the unit
          format: int32
        cleanStatus:
          type: string
          description: Clean status of the unit
          enum:
            - CLEAN
            - DIRTY
            - INSPECTED
        lastCleaned:
          type: string
          description: Date and time when the unit was last cleaned
          format: date-time
        inactive:
          type: boolean
          description: Indicates if the unit is inactive
        lastInspected:
          type: string
          description: Date and time when the unit was last inspected
          format: date-time
        occupied:
          type: boolean
          description: Indicates if the unit is occupied
        thirdPartyUrl:
          type: string
          description: Third party URL of the unit
        unitCostCentre:
          $ref: '#/components/schemas/CostCentreDTO'
        organisationId:
          type: integer
          description: Organisation ID of the unit
          format: int64
        apartmentThumbnailUrl:
          type: string
          description: Thumbnail URL of the apartment
    UnitTypeSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the unit type
          format: int64
          example: 1
        name:
          type: string
          description: Name of the unit type
          example: Studio Apartment
      description: Type summary of the unit
    GrantedAuthority:
      type: object
      properties:
        authority:
          type: string
    RerumUserDetails:
      type: object
      properties:
        userId:
          type: integer
          format: int64
        accountNonExpired:
          type: boolean
        accountNonLocked:
          type: boolean
        credentialsNonExpired:
          type: boolean
        username:
          type: string
        authorities:
          type: array
          items:
            $ref: '#/components/schemas/GrantedAuthority'
        password:
          type: string
        enabled:
          type: boolean
    BuildingSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the building
          format: int64
        name:
          type: string
          description: Name of the building
      description: Building associated with the unit type
    CompanyAddressDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the address
          format: int64
        addressLine1:
          type: string
          description: First line of the address
        addressLine2:
          type: string
          description: Second line of the address
        addressLine3:
          type: string
          description: Third line of the address
        city:
          type: string
          description: City of the address
        postCode:
          type: string
          description: Postal code of the address
        country:
          $ref: '#/components/schemas/CountryDTO'
        nickname:
          type: string
    CompanyDTO:
      required:
        - billingAddress
        - companyName
        - primaryCompanyAddress
        - primaryCompanyTelephoneNumber
        - type
        - vatRegistered
      type: object
      properties:
        id:
          type: integer
          format: int64
        companyName:
          type: string
        consolidatedBilling:
          type: boolean
        vatRegistered:
          type: boolean
        vatNumber:
          type: string
        websiteUrl:
          type: string
        creditLimit:
          type: number
        creditAccount:
          type: boolean
        companyFinanceAccount:
          $ref: '#/components/schemas/CompanyFinanceAccountDTO'
        billingAddress:
          $ref: '#/components/schemas/CompanyAddressDTO'
        primaryCompanyAddress:
          $ref: '#/components/schemas/CompanyAddressDTO'
        primaryCompanyEmailAddress:
          $ref: '#/components/schemas/CompanyEmailAddressDTO'
        primaryCompanyTelephoneNumber:
          $ref: '#/components/schemas/CompanyTelephoneNumberDTO'
        type:
          type: string
          enum:
            - CUSTOMER
            - BOOKING_AGENT
            - SUPPLIER
            - NETWORK_PROVIDER
            - LANDLORD
            - LETTING_AGENT
            - MANAGING_AGENT
            - BILLING
            - PARENT
        parentCompany:
          $ref: '#/components/schemas/CompanyDTO'
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - ARCHIVED
        hasPublicLiability:
          type: boolean
        liabilityAmount:
          type: number
        riskAssessment:
          type: boolean
        paymentTerm:
          type: number
        wrapInvoicesManually:
          type: boolean
        referrer:
          $ref: '#/components/schemas/ReferrerDTO'
        industry:
          $ref: '#/components/schemas/IndustryDTO'
        marketSegment:
          $ref: '#/components/schemas/MarketSegmentDTO'
        primaryCorrespondenceContact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        emailTo:
          type: string
          enum:
            - BOOKING_CONTACT
            - BOOKING_GUESTS
            - BOOKING_CONTACT_AND_GUESTS
        lifecycleStage:
          type: string
          enum:
            - LEAD
            - QUALIFIED
            - DISQUALIFIED
            - OPPORTUNITY
            - CUSTOMER
        statusDefault:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - ARCHIVED
        bankName:
          type: string
        bankAccountName:
          type: string
        bankAccountNo:
          type: string
        bankSortCode:
          type: string
        bankBicCode:
          type: string
        bankIbanCode:
          type: string
        linkCode:
          type: string
        source:
          type: string
          enum:
            - OFFLINE_SOURCE
            - ONLINE_ENQUIRY_FORM
            - ONLINE_BOOKING
            - SALES_CHANNEL
            - DIRECT_SALE
        creditCheckOk:
          type: boolean
        creditCheckDate:
          type: string
          format: date
        accountManager:
          $ref: '#/components/schemas/UserDTO'
      description: Company data to update
    CompanyEmailAddressDTO:
      required:
        - email
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the email address
          format: int64
          example: 1
        email:
          type: string
          description: Email address
          example: info@resharmonics.com
        nickname:
          type: string
          description: Nickname of the email address
          example: Work
        primary:
          type: boolean
          description: Primary email address
          example: true
    CompanyFinanceAccountDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the finance account
          format: int64
        accountCode:
          type: string
          description: Account code of the finance account
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        company:
          $ref: '#/components/schemas/CompanySummaryDTO'
        externalId:
          type: string
          description: External identifier of the finance account
        exportedDate:
          type: string
          description: Date when the finance account was exported
          format: date-time
        exportStatus:
          type: string
          description: Export status of the finance account
          enum:
            - SKIPPED
            - CREATED
            - PENDING
            - SENT
            - EXPORTED
            - FAILED
            - IMPORTED
    CompanySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the company
          format: int64
        companyName:
          type: string
          description: Name of the company
      description: Company summary associated with the finance account
    CompanyTelephoneNumberDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the company telephone number
          format: int64
        number:
          type: string
          description: Telephone number
        nickname:
          type: string
          description: Nickname for the telephone number
        primary:
          type: boolean
          description: Indicates if this is the primary telephone number
    ContactSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the contact
          format: int64
        firstName:
          type: string
          description: First name of the contact
        lastName:
          type: string
          description: Last name of the contact
    IndustryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the industry
          format: int64
        name:
          type: string
          description: Name of the industry
    MarketSegmentDTO:
      required:
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the market segment
          format: int64
        name:
          type: string
          description: Name of the market segment
    ReferrerDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the referrer
          format: int64
        code:
          type: string
          description: Code of the referrer
        name:
          type: string
          description: Name of the referrer
    TeamSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the team
          format: int64
        teamName:
          type: string
          description: The name of the team
      description: The team summary of the user
    UnitTypeDTO:
      required:
        - building
        - maxInternetBookingLimit
        - maxOccupancy
        - maxStay
        - minStay
        - name
        - shortDescription
        - type
        - unitTypeCode
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the unit type
          format: int64
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        name:
          type: string
          description: Name of the unit type
        unitTypeCode:
          type: string
          description: Code of the unit type
        shortDescription:
          type: string
          description: Short description of the unit type
        minStay:
          type: integer
          description: Minimum stay duration for the unit type
          format: int32
        maxStay:
          type: integer
          description: Maximum stay duration for the unit type
          format: int32
        maxOccupancy:
          type: integer
          description: Maximum occupancy for the unit type
          format: int32
        type:
          type: string
          description: Type of the unit
          enum:
            - STUDIO
            - ONE_BEDROOM
            - TWO_BEDROOM
            - THREE_BEDROOM
            - FOUR_BEDROOM
            - FIVE_BEDROOM
            - SIX_BEDROOM
            - TWIN_ROOM
            - COSY
            - STANDARD
            - COMFY
            - BIG
            - DOUBLE_ROOM
            - TWODIO
            - COSY_STUDIO
            - CLASSIC_STUDIO
            - CLASSIC_PLUS_STUDIO
            - PREMIUM_STUDIO
            - ACCESSIBLE_STUDIO
            - OFFICE
            - PARKING_SPACE
            - MEETING_ROOM
            - COMMUNAL_AREA
            - RETAIL_SPACE
            - SHUFFLE
            - STORAGE_SPACE
            - STORAGE_SPACE_TWO
            - STORAGE_SPACE_THREE
            - STORAGE_SPACE_FOUR
            - STORAGE_SPACE_FIVE
            - STORAGE_SPACE_SIX
        maxInternetBookingLimit:
          type: integer
          description: Maximum internet booking limit for the unit type
          format: int64
        sortOrder:
          type: integer
          description: Sort order of the unit type
          format: int32
        networkUnitOwner:
          $ref: '#/components/schemas/CompanyDTO'
        shortDescriptionLang2:
          type: string
          description: Short description in second language
        shortDescriptionLang3:
          type: string
          description: Short description in third language
        shortDescriptionLang4:
          type: string
          description: Short description in fourth language
        shortDescriptionLang5:
          type: string
          description: Short description in fifth language
        longDescription:
          type: string
          description: Long description of the unit type
        longDescriptionLang2:
          type: string
          description: Long description in second language
        longDescriptionLang3:
          type: string
          description: Long description in third language
        longDescriptionLang4:
          type: string
          description: Long description in fourth language
        longDescriptionLang5:
          type: string
          description: Long description in fifth language
        floorSpaceMin:
          type: integer
          description: Minimum floor space of the unit type
          format: int32
        floorSpaceMax:
          type: integer
          description: Maximum floor space of the unit type
          format: int32
        numberOfBedrooms:
          type: integer
          description: Number of bedrooms in the unit type
          format: int32
      description: >-
        Data Transfer Object representing a Unit Type in the Property Management
        System (PMS). A Unit Type defines the characteristics and attributes of
        a unit, such as its name, code, descriptions, occupancy limits, and
        associated building.
    UserDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the user
          format: int64
        firstName:
          type: string
          description: The first name of the user
        lastName:
          type: string
          description: The last name of the user
        username:
          type: string
          description: The username of the user
        enabled:
          type: boolean
          description: Indicates if the user is enabled
        jobTitle:
          type: string
          description: The job title of the user
        emailAddress:
          type: string
          description: The email address of the user
        telephoneNumber:
          type: string
          description: The telephone number of the user
        team:
          $ref: '#/components/schemas/TeamSummaryDTO'
    IdsListDTO:
      required:
        - ids
      type: object
      properties:
        ids:
          type: array
          description: List of unique identifiers
          example:
            - 1
            - 2
            - 3
            - 4
            - 5
          items:
            type: integer
            description: List of unique identifiers
            format: int64
      description: The unique identifier of the feature facility to link
    Access Group DTO:
      required:
        - building
        - externalIdentifier
        - name
      type: object
      properties:
        id:
          type: integer
          description: Id of Access Group
          format: int64
        name:
          type: string
          description: Name of Access Group
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        externalIdentifier:
          type: string
          description: External Identifier of Access Group
      description: Access Group DTO
    UnitAccessGroupDTO:
      required:
        - accessGroup
        - unit
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the Unit Access Group
          format: int64
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        accessGroup:
          $ref: '#/components/schemas/Access Group DTO'
      description: Unit Access Group Details
    UnitSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the unit
          format: int64
          example: 1
        name:
          type: string
          description: Name of the unit
          example: Apartment 101
      description: Summary of the Unit associated with the Unit Access Group
    CurrencyDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the currency
          format: int64
        name:
          type: string
          description: Name of the currency
        description:
          type: string
          description: Description of the currency
        symbol:
          type: string
          description: Symbol of the currency
        exchangeRate:
          type: number
          description: Exchange rate of the currency
        baseRate:
          type: number
          description: Base rate of the currency
        unit:
          type: string
          description: Unit of the currency
        autoUpdate:
          type: boolean
          description: Indicates if the currency is auto-updated
        primaryCurrency:
          type: boolean
          description: Indicates if this is the primary currency
        htmlSafeSymbol:
          type: string
          description: HTML safe symbol of the currency
      description: The currency of the organisation
    CurrencySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the currency
          format: int64
          example: 1
        name:
          type: string
          description: Name of the currency
          example: US Dollar
      description: Base currency details of the invoice
    FinanceAccountDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the finance account
          format: int64
        accountCode:
          type: string
          description: Account code of the finance account
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        company:
          $ref: '#/components/schemas/CompanySummaryDTO'
        externalId:
          type: string
          description: External identifier of the finance account
        exportedDate:
          type: string
          description: Date when the finance account was exported
          format: date-time
        exportStatus:
          type: string
          description: Export status of the finance account
          enum:
            - SKIPPED
            - CREATED
            - PENDING
            - SENT
            - EXPORTED
            - FAILED
            - IMPORTED
      description: Finance account details
    OrganisationSettingsSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the organisation settings
          format: int64
          example: 1
        name:
          type: string
          description: The name of the organisation
          example: Resharmonics
        currency:
          $ref: '#/components/schemas/CurrencyDTO'
        country:
          $ref: '#/components/schemas/CountryDTO'
      description: Organisation settings
    SalesInvoiceDTO:
      required:
        - currency
        - dueDate
        - financeAccount
        - invoiceDate
        - organisationSettings
        - type
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the sales invoice
          format: int64
        salesInvoiceNumber:
          type: integer
          description: Sales invoice number
          format: int64
        type:
          type: string
          description: Type of the sales invoice
          enum:
            - SALES_INVOICE
            - SALES_CREDIT
        invoiceDate:
          type: string
          description: Date of the invoice
          format: date
        net:
          type: number
          description: Net amount of the invoice
        tax:
          type: number
          description: Tax amount of the invoice
        gross:
          type: number
          description: Gross amount of the invoice
        baseNet:
          type: number
          description: Base net amount of the invoice
        baseTax:
          type: number
          description: Base tax amount of the invoice
        baseGross:
          type: number
          description: Base gross amount of the invoice
        reportingNet:
          type: number
          description: Reporting net amount of the invoice
        reportingTax:
          type: number
          description: Reporting tax amount of the invoice
        reportingGross:
          type: number
          description: Reporting gross amount of the invoice
        dueDate:
          type: string
          description: Due date of the invoice
          format: date
        dateSent:
          type: string
          description: Date when the invoice was sent
          format: date
        currency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        baseCurrency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        exchangeRate:
          type: number
          description: Exchange rate applied to the invoice
        baseExchangeRate:
          type: number
          description: Base exchange rate applied to the invoice
        customerName:
          type: string
          description: Customer name associated with the invoice
        companyName:
          type: string
          description: Company name associated with the invoice
        addressLine1:
          type: string
          description: Address line 1 of the customer
        addressLine2:
          type: string
          description: Address line 2 of the customer
        addressLine3:
          type: string
          description: Address line 3 of the customer
        city:
          type: string
          description: City of the customer
        postCode:
          type: string
          description: Post code of the customer
        country:
          $ref: '#/components/schemas/CountryDTO'
        customerReference:
          type: string
          description: Customer reference
        financeAccount:
          $ref: '#/components/schemas/FinanceAccountDTO'
        status:
          type: string
          description: Status of the invoice
          enum:
            - DRAFT
            - VOID
            - POSTED
        exportedDate:
          type: string
          description: Date when the invoice was exported
          format: date-time
        externalId:
          type: string
          description: External ID of the invoice
        exportStatus:
          type: string
          description: Export status of the invoice
          enum:
            - SKIPPED
            - CREATED
            - PENDING
            - SENT
            - EXPORTED
            - FAILED
            - IMPORTED
        payableOnline:
          type: boolean
          description: Indicates if the invoice is payable online
        issueId:
          type: integer
          description: Issue ID associated with the invoice
          format: int64
        eventBookingId:
          type: integer
          description: Event booking ID associated with the invoice
          format: int64
        uuid:
          type: string
          description: UUID of the invoice
        payableOnlineReference:
          type: integer
          description: Reference for online payment
          format: int64
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        referenceNumber:
          type: string
          description: Reference number of the invoice
        outStanding:
          type: number
          description: Outstanding amount of the invoice
        outStandingNet:
          type: number
          description: Outstanding net amount of the invoice
        outStandingVat:
          type: number
          description: Outstanding VAT amount of the invoice
        externalIdentifier:
          $ref: '#/components/schemas/XeroExternalIdentifierDTO'
    XeroExternalIdentifierDTO:
      required:
        - externalId
        - id
      type: object
      properties:
        id:
          type: integer
          description: Identifier
          format: int64
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        externalId:
          type: string
          description: External identifier
        exportedDate:
          type: string
          description: Exported date
          format: date-time
        exportStatus:
          type: string
          description: Export status
          enum:
            - CREATED
            - EXPORTED
            - FAILED
            - IMPORTED
            - PENDING
            - SENT
            - SKIPPED
      description: External identifier for Xero integration
    RegionDTO:
      required:
        - country
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the region
          format: int64
        name:
          type: string
          description: Name of the region
        country:
          $ref: '#/components/schemas/CountryDTO'
      description: >-
        Data Transfer Object representing a Region entity in the Property
        Management System (PMS).
    BookingSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the booking
          format: int64
        bookingReference:
          type: string
          description: The booking reference number
      description: Booking associated with the issue
    GuestStaySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the guest stay
          format: int64
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        dateFrom:
          type: string
          description: The start date of the guest stay
          format: date
        dateTo:
          type: string
          description: The end date of the guest stay
          format: date
      description: Guest stay associated with the issue
    Issue:
      required:
        - description
        - id
        - issuePriority
        - issueStatus
        - issueType
        - subject
      type: object
      properties:
        id:
          type: integer
          description: ID of the issue
          format: int64
        subject:
          type: string
          description: Subject of the issue
        description:
          type: string
          description: Description of the issue
        issueStatus:
          type: string
          description: Status of the issue
          enum:
            - OPEN
            - STARTED
            - RESOLVED
            - CLOSED
        issuePriority:
          $ref: '#/components/schemas/IssuePrioritySummaryDTO'
        issueType:
          $ref: '#/components/schemas/IssueTypeSummaryDTO'
        restrictsAvailability:
          type: boolean
          description: Indicates if the issue restricts availability
        restrictsAvailabilityFrom:
          type: string
          description: Start date of availability restriction
          format: date
        restrictsAvailabilityTo:
          type: string
          description: End date of availability restriction
          format: date
        responseTargetDate:
          type: string
          description: Target date for response
          format: date-time
        respondedDate:
          type: string
          description: Date when the issue was responded to
          format: date-time
        resolutionTargetDate:
          type: string
          description: Target date for resolution
          format: date-time
        resolvedDate:
          type: string
          description: Date when the issue was resolved
          format: date-time
        closedDate:
          type: string
          description: Date when the issue was closed
          format: date-time
        assigneeTeam:
          $ref: '#/components/schemas/TeamSummaryDTO'
        assigneeUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        booking:
          $ref: '#/components/schemas/BookingSummaryDTO'
        reporterUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        reporterContact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        resolvedBy:
          $ref: '#/components/schemas/UserSummaryDTO'
        closedBy:
          $ref: '#/components/schemas/UserSummaryDTO'
        timeOfReporting:
          type: string
          description: Time when the issue was reported
          format: date-time
        assigneeCompany:
          $ref: '#/components/schemas/CompanySummaryDTO'
        startedDate:
          type: string
          description: Date when the issue was started
          format: date-time
        startedBy:
          $ref: '#/components/schemas/UserSummaryDTO'
        elapsedTime:
          type: integer
          description: Elapsed time for the issue
          format: int64
        guestStay:
          $ref: '#/components/schemas/GuestStaySummaryDTO'
        readStatus:
          type: boolean
          description: Read status of the issue
        uuid:
          type: string
          description: UUID of the issue
        private:
          type: boolean
      description: Issue details
    IssuePrioritySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the issue priority
          format: int64
        name:
          type: string
          description: The name of the issue priority
      description: Priority of the issue
    IssueTypeSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Issue type id
          format: int64
          example: 1
        name:
          type: string
          description: Issue type name
          example: Bug
      description: Type of the issue
    UserSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the user
          format: int64
        firstName:
          type: string
          description: The first name of the user
        lastName:
          type: string
          description: The last name of the user
        username:
          type: string
          description: The username of the user
      description: User who started the issue
    StatusUpdateDTO:
      required:
        - status
      type: object
      properties:
        status:
          type: string
          description: The new status to be applied to the entity
          example: ACTIVE
      description: Status Update
    AreaSummaryDTO:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          description: Area ID
          format: int64
        name:
          type: string
          description: Area name
      description: Area where the development is located
    DevelopmentDTO:
      required:
        - area
        - description
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the development
          format: int64
          example: 123456
        area:
          $ref: '#/components/schemas/AreaSummaryDTO'
        name:
          type: string
          description: Name of the development
          example: The Residences at XYZ
        description:
          type: string
          description: Description of the development
          example: A luxury residential development with 100 units
        primaryImageUrl:
          type: string
          description: Primary image URL for the development
          example: https://example.com/images/development.jpg
      description: >-
        Data Transfer Object representing a Development entity in the Property
        Management System (PMS). A Development is a marketing level grouping for
        individual Buildings, providing details such as name, description, and
        associated area.
    ContactAddressDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the address
          format: int64
        addressLine1:
          type: string
          description: First line of the address
        addressLine2:
          type: string
          description: Second line of the address
        addressLine3:
          type: string
          description: Third line of the address
        city:
          type: string
          description: City of the address
        postCode:
          type: string
          description: Postal code of the address
        country:
          $ref: '#/components/schemas/CountryDTO'
        nickname:
          type: string
          description: Nickname of the contact address
        primary:
          type: boolean
          description: Indicates if this is the primary address
      description: Data Transfer Object representing a contact's address
    ContactDTO:
      required:
        - firstName
        - lastName
        - primaryContactAddress
        - primaryContactEmailAddress
        - primaryContactTelephoneNumber
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        middleNames:
          type: string
        lastName:
          type: string
        jobTitle:
          type: string
        department:
          type: string
        preferences:
          type: string
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - BANNED
            - ARCHIVED
            - VIP
            - WAITLIST
            - REMOVED
        marketingOptOut:
          type: boolean
          description: Marketing opt-out status of the contact
        contactSalesAccount:
          $ref: '#/components/schemas/ContactFinanceAccountDTO'
        title:
          type: string
          description: Title of the contact
          enum:
            - MR
            - MISS
            - MS
            - MRS
        gender:
          type: string
          description: Gender of the contact
          enum:
            - MALE
            - FEMALE
            - OTHER
        referrer:
          $ref: '#/components/schemas/ReferrerDTO'
        industry:
          $ref: '#/components/schemas/IndustryDTO'
        marketSegment:
          $ref: '#/components/schemas/MarketSegmentDTO'
        nationality:
          $ref: '#/components/schemas/NationalityDTO'
        company:
          $ref: '#/components/schemas/CompanySummaryDTO'
        primaryContactAddress:
          $ref: '#/components/schemas/ContactAddressDTO'
        primaryContactEmailAddress:
          $ref: '#/components/schemas/ContactEmailAddressDTO'
        primaryContactTelephoneNumber:
          $ref: '#/components/schemas/ContactTelephoneNumberDTO'
        preferredContactMethod:
          type: string
          description: Preferred contact method of the contact
          enum:
            - TELEPHONE
            - EMAIL
            - MAIL
        type:
          type: string
          description: Type of the contact
          enum:
            - BOOKER
            - GUEST
        source:
          type: string
          description: Source of the contact
          enum:
            - OFFLINE_SOURCE
            - ONLINE_ENQUIRY_FORM
            - ONLINE_BOOKING
            - DIRECT_SALE
            - SALES_CHANNEL
        idCheck:
          type: boolean
          description: ID check status of the contact
        companyName:
          type: string
          description: Company name associated with the contact
        lifecycleStage:
          type: string
          description: Lifecycle stage of the contact
          enum:
            - LEAD
            - QUALIFIED
            - DISQUALIFIED
            - OPPORTUNITY
            - CUSTOMER
        lastBookingRole:
          type: string
          description: Last booking role of the contact
          enum:
            - NONE
            - BOOKER
            - GUEST
            - GUEST_BOOKER
        uuid:
          type: string
          description: UUID of the contact
        password:
          type: string
          description: Password of the contact
        saltoIdentifier:
          type: string
          description: Salto identifier of the contact
        saltoAssignedTagId:
          type: string
          description: Salto assigned tag ID of the contact
        cognitoId:
          type: string
          description: Cognito ID of the contact
        passportNumber:
          type: string
          description: Passport number of the contact
        saltoRegistrationStatus:
          type: string
          description: Salto registration status of the contact
          enum:
            - UNKNOWN
            - NOT_INVITED
            - INVITED
            - REGISTERED
        saltoKeysLastUpdated:
          type: string
          description: Last updated time of Salto keys
          format: date-time
        keyCardCode:
          type: string
          description: Key card code of the contact
        identityConfirmedDate:
          type: string
          description: Date when the identity was confirmed
          format: date-time
        identityConfirmedReference:
          type: string
          description: Reference for the identity confirmation
        creditCheckOk:
          type: boolean
          description: Credit check status of the contact
        creditCheckDate:
          type: string
          description: Date of the credit check
          format: date
        socialSecurityNumber:
          type: string
          description: Social security number of the contact
        dateOfBirth:
          type: string
          format: date
      description: Contact data to create
    ContactEmailAddressDTO:
      required:
        - email
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the email address
          format: int64
          example: 1
        email:
          type: string
          description: Email address
          example: info@resharmonics.com
        nickname:
          type: string
          description: Nickname of the contact
        primary:
          type: boolean
          description: Indicates if this is the primary email address
      description: Primary email address of the contact
    ContactFinanceAccountDTO:
      required:
        - contact
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the finance account
          format: int64
        accountCode:
          type: string
          description: Account code of the finance account
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        company:
          $ref: '#/components/schemas/CompanySummaryDTO'
        externalId:
          type: string
          description: External identifier of the finance account
        exportedDate:
          type: string
          description: Date when the finance account was exported
          format: date-time
        exportStatus:
          type: string
          description: Export status of the finance account
          enum:
            - SKIPPED
            - CREATED
            - PENDING
            - SENT
            - EXPORTED
            - FAILED
            - IMPORTED
      description: Sales account associated with the contact
    ContactTelephoneNumberDTO:
      required:
        - number
      type: object
      properties:
        id:
          type: integer
          format: int64
        number:
          type: string
        nickname:
          type: string
          description: Nickname of the contact
        primary:
          type: boolean
          description: Indicates if this is the primary telephone number
      description: Primary telephone number of the contact
    NationalityDTO:
      type: object
      properties:
        id:
          type: integer
          description: ID of the nationality
          format: int64
        name:
          type: string
          description: Name of the nationality
        isoCode:
          type: integer
          description: ISO code of the nationality
          format: int64
        sortOrder:
          type: integer
          description: Sort order of the nationality
          format: int64
        countryCodeAlpha2:
          type: string
          description: Country code in Alpha-2 format
      description: Nationality of the contact
    CityDTO:
      type: object
      properties:
        id:
          type: integer
          description: City ID
          format: int64
          example: 1
        name:
          type: string
          description: City name
          example: Birmingham
        region:
          $ref: '#/components/schemas/RegionSummaryDTO'
      description: City details
    RegionSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Region ID
          format: int64
          example: 1
        name:
          type: string
          description: Region name
          example: West Midlands
      description: Region details
    BookingTypeDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the booking type
          format: int64
        name:
          type: string
          description: The name of the booking type
        description:
          type: string
          description: The description of the booking type
        shortCode:
          type: string
          description: The short code of the booking type
        billingType:
          type: string
          description: The billing type of the booking
          enum:
            - ON_ACCOUNT
            - CREDIT_CARD
            - CASH_PAYMENT
            - BANK_PAYMENT
            - VIRTUAL_CARD
        emailTo:
          type: string
          description: The email recipient of the booking
          enum:
            - BOOKING_CONTACT
            - BOOKING_GUESTS
            - BOOKING_CONTACT_AND_GUESTS
        systemBookingType:
          type: boolean
          description: Indicates if it is a system booking type
        systemName:
          type: string
          description: The system name of the booking type
        uuid:
          type: string
          description: The unique identifier for the booking type
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
      description: Booking type of the building
    BuildingAddressDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the address
          format: int64
        addressLine1:
          type: string
          description: First line of the address
        addressLine2:
          type: string
          description: Second line of the address
        addressLine3:
          type: string
          description: Third line of the address
        city:
          type: string
          description: City of the address
        postCode:
          type: string
          description: Postal code of the address
        country:
          $ref: '#/components/schemas/CountryDTO'
      description: Address details of the building
    BuildingDTO:
      required:
        - buildingAddress
        - buildingManagementType
        - latitude
        - longDescription
        - longitude
        - maxStay
        - minStay
        - name
        - organisationSettings
        - shortDescription
      type: object
      properties:
        buildingManagementType:
          type: string
          description: >-
            The type of building management MANAGED or AGENCY. MANAGED by the
            operator, AGENCY by a third party.
          enum:
            - MANAGED
            - AGENCY
        networkOperator:
          $ref: '#/components/schemas/CompanySummaryDTO'
        id:
          type: integer
          description: The unique identifier of the building
          format: int64
        development:
          $ref: '#/components/schemas/DevelopmentSummaryDTO'
        buildingAddress:
          $ref: '#/components/schemas/BuildingAddressDTO'
        name:
          type: string
          description: Name of the building
        shortName:
          type: string
          description: Short name of the building
        latitude:
          type: number
          description: Latitude coordinate of the building
        longitude:
          type: number
          description: Longitude coordinate of the building
        directions:
          type: string
          description: Directions to the building
        shortDescription:
          type: string
          description: Short description of the building
        longDescription:
          type: string
          description: Long description of the building
        minStay:
          type: integer
          description: Minimum stay duration in the building
          format: int32
        maxStay:
          type: integer
          description: Maximum stay duration in the building
          format: int32
        siteId:
          type: string
          description: Site identifier of the building for access control systems
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        shortDescriptionLang2:
          type: string
          description: Short description in second language
        shortDescriptionLang3:
          type: string
          description: Short description in third language
        shortDescriptionLang4:
          type: string
          description: Short description in fourth language
        shortDescriptionLang5:
          type: string
          description: Short description in fifth language
        longDescriptionLang2:
          type: string
          description: Long description in second language
        longDescriptionLang3:
          type: string
          description: Long description in third language
        longDescriptionLang4:
          type: string
          description: Long description in fourth language
        longDescriptionLang5:
          type: string
          description: Long description in fifth language
        directionsLang2:
          type: string
          description: Directions in second language
        directionsLang3:
          type: string
          description: Directions in third language
        directionsLang4:
          type: string
          description: Directions in fourth language
        directionsLang5:
          type: string
          description: Directions in fifth language
        saltoSpaceServiceId:
          type: string
          description: Salto space service identifier
        uuid:
          type: string
          description: UUID of the building
        thirdPartyUrl:
          type: string
          description: Third party URL associated with the building
        houseRules:
          type: string
          description: House rules of the building
        bookingType:
          $ref: '#/components/schemas/BookingTypeDTO'
    DevelopmentSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the Development
          format: int64
          example: 1
        name:
          type: string
          description: Name of the Development
          example: The Residences
      description: Summary of the development the building belongs to
    BookingStatusUpdateDTO:
      required:
        - statusUpdates
      type: object
      properties:
        statusUpdates:
          type: array
          description: The status updates for the room stays, add one per room stay
          items:
            $ref: '#/components/schemas/RoomStayStatusUpdateDTO'
    RoomStayStatusUpdateDTO:
      required:
        - roomStayId
        - status
      type: object
      properties:
        roomStayId:
          type: integer
          description: The id of the room stay
          format: int64
        status:
          type: string
          description: >-
            The status of the room stay, must be one of PENDING, CONFIRMED,
            CHECKED_IN, CHECKED_OUT, CANCELLED, LOST
          enum:
            - PENDING
            - CONFIRMED
            - CHECKED_IN
            - CHECKED_OUT
            - CANCELLED
            - LOST
      description: The status updates for the room stays, add one per room stay
    ApiPageRoomStayStatusUpdateResultDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RoomStayStatusUpdateResultDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    PageMetadata:
      type: object
      properties:
        size:
          type: integer
          format: int32
        totalElements:
          type: integer
          format: int64
        totalPages:
          type: integer
          format: int32
        number:
          type: integer
          format: int32
    RoomStayStatusUpdateResultDTO:
      type: object
      properties:
        roomStayId:
          type: integer
          description: The id of the room stay
          format: int64
        success:
          type: boolean
          description: The success status of the update
        errorMessage:
          type: string
          description: The error message if the update failed
    AreaDTO:
      type: object
      properties:
        id:
          type: integer
          description: ID of the area
          format: int64
        name:
          type: string
          description: Name of the area
        city:
          $ref: '#/components/schemas/CitySummaryDTO'
      description: >-
        Data Transfer Object representing an Area entity in the Property
        Management System (PMS).
    CitySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: ID of the city
          format: int64
        name:
          type: string
          description: Name of the city
      description: City which the area is part of
    ActivityDTO:
      type: object
      properties:
        id:
          type: integer
          description: ID of the Activity
          format: int64
        subject:
          type: string
          description: Subject of the Activity
        content:
          type: string
          description: Content of the Activity
        dueDate:
          type: string
          description: Due date of the Activity
          format: date
        scheduledDate:
          type: string
          description: Scheduled date of the Activity
          format: date-time
        originalScheduledDate:
          type: string
          description: Original scheduled date of the Activity
          format: date-time
        duration:
          type: integer
          description: Duration of the Activity
          format: int32
        resolvedDate:
          type: string
          description: Resolved date of the Activity
          format: date-time
        closedDate:
          type: string
          description: Closed date of the Activity
          format: date-time
        status:
          type: string
          description: Status of the Activity
          enum:
            - OPEN
            - STARTED
            - RESOLVED
            - CLOSED
        activityType:
          $ref: '#/components/schemas/ActivityTypeDTO'
        priority:
          type: string
          description: Priority of the Activity
          enum:
            - ONE
            - TWO
            - THREE
            - FOUR
            - FIVE
        issue:
          $ref: '#/components/schemas/Issue'
        userAssignee:
          $ref: '#/components/schemas/UserSummaryDTO'
        teamAssignee:
          $ref: '#/components/schemas/TeamDTO'
        companyAssignee:
          $ref: '#/components/schemas/CompanySummaryDTO'
        restrictsAvailability:
          type: boolean
          description: Whether the Activity restricts availability
        closedByUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        resolvedByUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        ppmId:
          type: integer
          description: PPM ID of the Activity
          format: int64
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        booking:
          $ref: '#/components/schemas/BookingSummaryDTO'
        unitType:
          $ref: '#/components/schemas/UnitTypeSummaryDTO'
        roomStay:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        activityTemplateId:
          type: integer
          description: Activity template ID
          format: int64
        chargeableExtraId:
          type: integer
          description: Chargeable extra ID
          format: int64
        consumableItemType:
          type: string
          description: Consumable item type of the Activity
          enum:
            - LAUNDRY
        startedDate:
          type: string
          description: Started date of the Activity
          format: date-time
        startedByUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        elapsedTime:
          type: integer
          description: Elapsed time of the Activity
          format: int64
        keyLocationId:
          type: integer
          description: Key location ID of the Activity
          format: int64
        contactId:
          $ref: '#/components/schemas/ContactSummaryDTO'
        guestStayId:
          $ref: '#/components/schemas/GuestStaySummaryDTO'
        checklistRequired:
          type: boolean
          description: Whether a checklist is required for the Activity
        startedLocation:
          type: string
          description: Started location of the Activity
        completedLocation:
          type: string
          description: Completed location of the Activity
        closedLocation:
          type: string
          description: Closed location of the Activity
        roomStayExtraId:
          type: integer
          description: Room stay extra ID
          format: int64
        uuid:
          type: string
          description: UUID of the Activity
        generated:
          type: boolean
          description: Whether the Activity is generated
        tracksUnitAmendments:
          type: boolean
          description: Whether the Activity tracks unit amendments
    ActivityTypeDTO:
      type: object
      properties:
        created:
          type: string
          format: date-time
        lastUpdated:
          type: string
          format: date-time
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
        deleted:
          type: boolean
        id:
          type: integer
          description: Unique identifier of the activity type
          format: int64
        name:
          type: string
          description: Name of the activity type
        systemType:
          type: boolean
          description: Indicates if this is a system type
        category:
          type: string
          description: Category of the activity type
          enum:
            - CLEANING
            - PPM
            - MAINTENANCE
            - SYSTEM
      description: Type of the Activity
    Link:
      type: object
      properties:
        rel:
          type: string
        href:
          type: string
        hreflang:
          type: string
        media:
          type: string
        title:
          type: string
        type:
          type: string
        deprecation:
          type: string
        profile:
          type: string
        name:
          type: string
    RoomStaySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the room stay
          format: int64
        startDate:
          type: string
          description: Start date of the room stay
          format: date
        endDate:
          type: string
          description: End date of the room stay
          format: date
        roomStayStatus:
          type: string
          description: Status of the room stay
          enum:
            - ENQUIRY
            - QUOTED
            - PENDING
            - MEDIATION_REQUIRED
            - CONFIRMED
            - CHECKED_IN
            - CHECKED_OUT
            - COMPLETE
            - CANCELLED
            - LOST
        netAmount:
          type: number
          description: Net amount for the room stay
        vatAmount:
          type: number
          description: VAT amount for the room stay
        numberOfAdults:
          type: integer
          description: Number of adults in the room stay
          format: int32
        numberOfChildren:
          type: integer
          description: Number of children in the room stay
          format: int32
        numberOfInfants:
          type: integer
          description: Number of infants in the room stay
          format: int32
      description: Room stay related to the Activity
    TeamDTO:
      required:
        - emailAddress
        - id
        - teamName
        - type
      type: object
      properties:
        id:
          type: integer
          description: Team ID
          format: int64
        teamName:
          type: string
          description: Team name
        emailAddress:
          type: string
          description: Email address
        type:
          type: string
          description: Team type
          enum:
            - DEFAULT
            - HOUSEKEEPING
      description: Team assigned to the Activity
    UnitTypeImageDTO:
      required:
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the attachment
          format: int64
        name:
          type: string
          description: Name of the attachment
        description:
          type: string
          description: Description of the attachment
        fileSize:
          type: integer
          description: File size in bytes
          format: int64
        fileType:
          type: string
          description: File type of the attachment, e.g., image/jpeg
        viewUrl:
          type: string
        unitType:
          $ref: '#/components/schemas/UnitTypeSummaryDTO'
        isPrimary:
          type: boolean
    CreateRoomStayExtraDTO:
      required:
        - endDate
        - id
        - startDate
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the room stay extra
          format: int64
        startDate:
          type: string
          description: Start date of the extra
          format: date
        endDate:
          type: string
          description: End date of the extra
          format: date
        guestId:
          type: integer
          description: >-
            Guest Id for the extra, if not specified the extra will be linked to
            the room stay
          format: int64
    ProductSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the product
          format: int64
          example: 1
        productCode:
          type: string
          description: Code of the product
          example: PROD-001
        name:
          type: string
          description: Name of the product
          example: Product 1
      description: Product associated with the room stay extra
    RoomStayExtraDTO:
      required:
        - description
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the room stay extra
          format: int64
          example: 1
        description:
          type: string
          description: Description of the room stay extra
        product:
          $ref: '#/components/schemas/ProductSummaryDTO'
        frequency:
          type: string
          description: Frequency of the chargeable extra
          enum:
            - ONE_OFF
            - DAILY
            - WEEKLY
            - MONTHLY
        netPrice:
          type: number
          description: Net price of the room stay extra
        vatProfile:
          $ref: '#/components/schemas/VatProfileDTO'
        startDate:
          type: string
          description: Start date of the room stay extra
          format: date
        endDate:
          type: string
          description: End date of the room stay extra
          format: date
        lockToStay:
          type: boolean
          description: Indicates if the room stay extra is locked to stay
        status:
          type: string
          description: Status of the room stay extra
          enum:
            - ACTIVE
            - CANCELLING
            - CANCELLED
        vatInclusive:
          type: boolean
          description: Indicates if the VAT is inclusive
        extensionRequired:
          type: boolean
          description: Indicates if extension is required
        createCommission:
          type: boolean
          description: Indicates if commission creation is required
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        pricingModel:
          type: string
          description: Indicates which pricing model to be used for the room stay extra
          enum:
            - UNIT_PRICE
            - LINKED_TO_ROOM_RATE
        percentageValue:
          type: number
          description: >-
            The percentage value of the room rate to be used if the room rate
            pricing model is enabled
        roomRateBasis:
          type: string
          description: >-
            Indicates if NET or GROSS room rate value is used if the room rate
            pricing model is enabled
          enum:
            - GROSS
            - NET
        guestStay:
          $ref: '#/components/schemas/GuestStaySummaryDTO'
    VatProfileDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the VAT profile
          format: int64
        name:
          type: string
          description: The name of the VAT profile
        description:
          type: string
          description: The description of the VAT profile
        primaryProfile:
          type: boolean
          description: Indicates if this is the primary profile
        systemProfile:
          type: boolean
          description: Indicates if this is a system profile
      description: VAT profile of the room stay extra
    LeadContactDetailsDTO:
      required:
        - email
        - firstName
        - lastName
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        phone:
          type: string
        marketSegment:
          type: string
      description: Contact details of the lead
    LeadDTO:
      required:
        - bookingType
        - contactDetails
        - endDate
        - requestedLocation
        - startDate
        - unitTypes
      type: object
      properties:
        startDate:
          type: string
          description: Start date of the booking
          format: date
          example: '2025-01-01'
        endDate:
          type: string
          description: End date of the booking
          format: date
          example: '2025-12-01'
        contactDetails:
          $ref: '#/components/schemas/LeadContactDetailsDTO'
        bookingType:
          type: string
          description: Type of booking, should be the name of a booking type
          example: Default
        unitTypes:
          type: array
          description: >-
            List of requested unit types, these are the generic unit type names
            from the PMS
          items:
            type: string
            description: >-
              List of requested unit types, these are the generic unit type
              names from the PMS
        requestedLocation:
          type: string
          description: >-
            Requested location for the booking, this is a string that can be a
            building name or an area name
          example: Central London
        budget:
          type: number
          description: Budget for the booking
          example: 1500
        referrer:
          type: string
          description: Source of the lead/referrer information, the CODE of a referrer
          example: WEB
        notes:
          type: string
          description: Additional notes about the lead, creates a note on the lead
          example: Looking for a pet-friendly unit
        channel:
          type: string
          description: Channel through which the lead was created, by channel name
          example: ONLINE
        selectedLocations:
          type: array
          description: >-
            List of selected location preferences, these are EITHER the names of
            buildings OR the ids of buildings as integers
          items:
            type: string
            description: >-
              List of selected location preferences, these are EITHER the names
              of buildings OR the ids of buildings as integers
      description: >-
        Lead information, to create a lead in the system, which can be converted
        to an enquiry or booking later.
    IssueNote:
      required:
        - note
        - noteCategory
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the note
          format: int64
        note:
          type: string
          description: Content of the note
        noteCategory:
          $ref: '#/components/schemas/NoteCategoryDTO'
        issue:
          $ref: '#/components/schemas/Issue'
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        apiCreated:
          type: boolean
          description: Whether the note was created via the API
        createdByUser:
          $ref: '#/components/schemas/UserDTO'
        updatedByUser:
          $ref: '#/components/schemas/UserDTO'
        created:
          type: string
          description: Timestamp when the note was created
          format: date-time
        lastUpdated:
          type: string
          description: Timestamp when the note was last updated
          format: date-time
        private:
          type: boolean
      description: Issue Note
    NoteCategoryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the note category
          format: int64
        name:
          type: string
          description: Name of the note category
        defaultCategory:
          type: boolean
          description: Indicates if this is the default category
        buildingLimit:
          type: integer
          format: int64
        nameLowercase:
          type: string
        default:
          type: integer
          format: int32
      description: Note category identifier
    ChargeableExtraPaymentDTO:
      required:
        - paymentReference
      type: object
      properties:
        paymentReference:
          type: string
          description: The payment reference for the chargeable extra
    FinancialDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the financial record
          format: int64
        financialType:
          type: string
          description: Type of the financial record
          enum:
            - SALES_INVOICE
            - SALES_CREDIT
            - SALES_RECEIPT
            - SALES_REFUND
            - SALES_ACCOUNT
            - PURCHASE_INVOICE
            - PURCHASE_CREDIT
            - PURCHASE_RECEIPT
            - PURCHASE_REFUND
            - PURCHASE_ACCOUNT
            - T_SALES_INVOICE
            - T_SALES_CREDIT
            - T_SALES_RECEIPT
            - T_SALES_REFUND
            - T_PURCHASE_INVOICE
            - T_PURCHASE_CREDIT
            - T_PURCHASE_RECEIPT
            - T_PURCHASE_REFUND
            - ACCOUNT_DEBIT
            - T_ACCOUNT_CREDIT
            - BANK_TRANSFER_CREDIT
            - BANK_TRANSFER_DEBIT
        creditCardType:
          type: string
          description: Type of the credit card
          enum:
            - VISA_CREDIT
            - VISA_DEBIT
            - MASTERCARD
            - MASTERCARD_DEBIT
            - DELTA
            - MAESTRO
            - VISA_ELECTRON
            - AMERICAN_EXPRESS
            - DINERS_CLUB
            - JCB
            - PAYPAL
            - VISA
        dateCreated:
          type: string
          description: Date when the financial record was created
          format: date
        description:
          type: string
          description: Description of the financial record
        net:
          type: number
          description: Net amount of the financial record
        baseNet:
          type: number
          description: Base net amount of the financial record
        reportingNet:
          type: number
          description: Reporting net amount of the financial record
        vat:
          type: number
          description: VAT amount of the financial record
        baseVat:
          type: number
          description: Base VAT amount of the financial record
        reportingVat:
          type: number
          description: Reporting VAT amount of the financial record
        gross:
          type: number
          description: Gross amount of the financial record
        baseGross:
          type: number
          description: Base gross amount of the financial record
        reportingGross:
          type: number
          description: Reporting gross amount of the financial record
        amountPaid:
          type: number
          description: Amount paid for the financial record
        paymentType:
          type: string
          description: Payment type of the financial record
          enum:
            - BANK_PAYMENT
            - CARD_PAYMENT
            - CREDIT_CARD_TERMINAL
            - CASH_PAYMENT
            - OFFLINE_PAYMENT
            - ADJUSTMENT
        paymentReference:
          type: string
          description: Payment reference of the financial record
        nominalCode:
          $ref: '#/components/schemas/NominalCodeDTO'
        taxRate:
          type: number
          description: Tax rate of the financial record
        taxCode:
          $ref: '#/components/schemas/TaxCodeDTO'
        financeAccount:
          $ref: '#/components/schemas/FinanceAccountDTO'
        salesInvoiceItem:
          $ref: '#/components/schemas/SalesInvoiceItemDTO'
        unallocated:
          type: number
          description: Unallocated amount of the financial record
        cardLastFour:
          type: string
          description: Last four digits of the credit card
        xeroIdentifier:
          $ref: '#/components/schemas/XeroExternalIdentifierDTO'
        exportedDate:
          type: string
          description: Date when the financial record was exported
          format: date-time
        externalId:
          type: string
          description: External identifier of the financial record
        exportStatus:
          type: string
          description: Export status of the financial record
          enum:
            - SKIPPED
            - CREATED
            - PENDING
            - SENT
            - EXPORTED
            - FAILED
            - IMPORTED
        organisationSettingsId:
          type: integer
          description: Organisation settings ID associated with the financial record
          format: int64
        exchangeRate:
          type: number
          description: Exchange rate of the financial record
        currency:
          $ref: '#/components/schemas/CurrencyDTO'
        baseExchangeRate:
          type: number
          description: Base exchange rate of the financial record
        baseCurrency:
          $ref: '#/components/schemas/CurrencyDTO'
        costCentre:
          $ref: '#/components/schemas/CostCentreDTO'
    NominalCodeDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the nominal code
          format: int64
        code:
          type: string
          description: The code of the nominal code
        description:
          type: string
          description: The description of the nominal code
        type:
          type: string
          description: The type of the nominal code
          enum:
            - BANK
            - CARD
            - OWNER_LIABILITY
            - PURCHASE
            - SALES
        currency:
          $ref: '#/components/schemas/CurrencyDTO'
        accountType:
          type: string
          description: The account type of the nominal code
      description: Nominal code details
    SalesInvoiceItemDTO:
      type: object
      properties:
        id:
          type: integer
          description: ID of the sales invoice item
          format: int64
        uuid:
          type: string
          description: UUID of the sales invoice item
        salesInvoice:
          $ref: '#/components/schemas/SalesInvoiceSummaryDTO'
        description:
          type: string
          description: Description of the sales invoice item
        comment1:
          type: string
          description: First comment
        comment2:
          type: string
          description: Second comment
        currency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        baseCurrency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        type:
          type: string
          description: Type of the invoice
          enum:
            - SALES_INVOICE
            - SALES_CREDIT
        unitPrice:
          type: number
          description: Unit price
        baseUnitPrice:
          type: number
          description: Base unit price
        reportingUnitPrice:
          type: number
          description: Reporting unit price
        quantity:
          type: number
          description: Quantity
        gross:
          type: number
          description: Gross amount
        baseGross:
          type: number
          description: Base gross amount
        reportingGross:
          type: number
          description: Reporting gross amount
        net:
          type: number
          description: Net amount
        baseNet:
          type: number
          description: Base net amount
        reportingNet:
          type: number
          description: Reporting net amount
        tax:
          type: number
          description: Tax amount
        baseTax:
          type: number
          description: Base tax amount
        reportingTax:
          type: number
          description: Reporting tax amount
        taxRate:
          type: number
          description: Tax rate
        taxCode:
          $ref: '#/components/schemas/TaxCodeDTO'
        chargeFrom:
          type: string
          description: Charge start date
          format: date
        chargeTo:
          type: string
          description: Charge end date
          format: date
        dueDate:
          type: string
          description: Due date
          format: date
        invoiceDate:
          type: string
          description: Invoice date
          format: date
        financeAccount:
          $ref: '#/components/schemas/FinanceAccountDTO'
        product:
          $ref: '#/components/schemas/ProductSummaryDTO'
        nominalCode:
          $ref: '#/components/schemas/NominalCodeDTO'
        ourReference:
          type: string
          description: Our reference
        status:
          type: string
          description: Status of the invoice item
          enum:
            - DRAFT
            - VOID
            - POSTED
        roomStay:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        unitPriceIncludesTax:
          type: boolean
          description: Indicates if unit price includes tax
        amountPaid:
          type: number
          description: Amount paid
      description: Sales invoice item associated with the financial record
    SalesInvoiceSummaryDTO:
      required:
        - dueDate
        - invoiceDate
        - type
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the sales invoice
          format: int64
          example: 1
        salesInvoiceNumber:
          type: integer
          description: Ordering for the sales ledger
          format: int64
          example: 1001
        type:
          type: string
          description: Type of the sales invoice
          enum:
            - SALES_INVOICE
            - SALES_CREDIT
        invoiceDate:
          type: string
          description: Date of the invoice
          format: date
          example: '2023-10-01'
        dueDate:
          type: string
          description: Due date of the invoice
          format: date
          example: '2023-10-15'
      description: Summary of the sales invoice
    TaxCodeDTO:
      required:
        - code
        - name
        - rate
        - type
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the tax code
          format: int64
          example: 1
        type:
          type: string
          description: Type of the tax code
          enum:
            - SALES
            - PURCHASE
        code:
          type: string
          description: Code of the tax code
        name:
          type: string
          description: Name of the tax code
        rate:
          type: number
          description: Rate of the tax code
        xeroTaxType:
          type: string
          description: Xero tax type of the tax code
        exportName:
          type: string
          description: Export name of the tax code
      description: Tax code details
    DevelopmentImageDTO:
      required:
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the attachment
          format: int64
        name:
          type: string
          description: Name of the attachment
        description:
          type: string
          description: Description of the attachment
        fileSize:
          type: integer
          description: File size in bytes
          format: int64
        fileType:
          type: string
          description: File type of the attachment, e.g., image/jpeg
        viewUrl:
          type: string
        development:
          $ref: '#/components/schemas/DevelopmentSummaryDTO'
        isPrimary:
          type: boolean
    NoteCreateDTO:
      required:
        - note
      type: object
      properties:
        note:
          type: string
          description: Note
        category:
          $ref: '#/components/schemas/NoteCategoryDTO'
      description: Booking Note to be created
    ContactNoteDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the note
          format: int64
        note:
          type: string
          description: Content of the note
        reason:
          $ref: '#/components/schemas/ReasonDTO'
        amendmentReason:
          $ref: '#/components/schemas/ReasonDTO'
        noteCategory:
          $ref: '#/components/schemas/NoteCategoryDTO'
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        private:
          type: boolean
    ReasonDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the reason
          format: int64
        reason:
          type: string
          description: Description of the reason
        turnedAway:
          type: boolean
          description: Indicates if the reason is for being turned away
        type:
          type: string
          description: Type of the reason
          enum:
            - CANCELLATION
            - AMENDMENT
      description: Reason for amending the note
    ApiMergeDTO:
      required:
        - primaryEntityId
        - secondaryEntityId
      type: object
      properties:
        primaryEntityId:
          type: integer
          description: ID of the primary entity to keep after the merge
          format: int64
          example: 12345
        secondaryEntityId:
          type: integer
          description: >-
            ID of the secondary entity that will be merged into the primary
            entity
          format: int64
          example: 67890
      description: Company merge details
    ApiResult:
      required:
        - message
        - success
      type: object
      properties:
        success:
          type: boolean
          description: Indicates whether the operation was successful.
          example: true
        message:
          type: string
          description: Additional human-readable information about the operation result.
          example: Contact created successfully.
      description: >-
        Standard API result wrapper indicating success/failure and a
        human-readable message.
    Booking:
      required:
        - billingFinanceAccountId
        - billingFrequencyId
        - bookingContactId
        - bookingFinanceAccountId
        - bookingTypeId
        - channelId
        - roomStays
      type: object
      properties:
        channelId:
          type: integer
          description: The id of the channel the booking is created through
          format: int64
        customerReference:
          type: string
          description: >-
            Customer reference for the booking, specific to external system /
            customer
        bookingFinanceAccountId:
          type: integer
          description: >-
            The finance account id of the contact or company that is making the
            booking
          format: int64
        billingFinanceAccountId:
          type: integer
          description: >-
            The finance account id of the contact or company that is paying for
            the booking
          format: int64
        bookingContactId:
          type: integer
          description: The contact id of the contact making the booking
          format: int64
        billingContactId:
          type: integer
          description: >-
            The contact id of the contact to receive emails, if not specified,
            the booking contact id is used
          format: int64
        guarantorContactId:
          type: integer
          description: The contact id of the contact guaranteeing the booking
          format: int64
        billingFrequencyId:
          type: integer
          description: The Billing Frequency Id for the booking
          format: int64
        bookingTypeId:
          type: integer
          description: The booking type id for the booking
          format: int64
        referrerId:
          type: integer
          description: The referrer id for the booking
          format: int64
        notes:
          type: string
          description: Notes to be added to the booking
        roomStays:
          type: array
          description: List of room stays to be created on the booking
          items:
            $ref: '#/components/schemas/CreateRoomStayDTO'
        reserveForMinutes:
          type: integer
          description: >-
            If the booking is created as an enquiry, then if specified the
            availability will be held for the number of minutes specified
          format: int32
        assigneeId:
          type: integer
          description: The user id of the assignee for the booking
          format: int64
      description: Used for the creation of a booking
    CreateRoomStayDTO:
      required:
        - endDate
        - inventoryType
        - inventoryTypeId
        - numberOfAdults
        - numberOfChildren
        - numberOfInfants
        - rateId
        - startDate
      type: object
      properties:
        rateId:
          type: integer
          description: Rate Id for the room stay
          format: int64
        startDate:
          type: string
          description: Start date of the stay
          format: date
        endDate:
          type: string
          description: End date of the stay
          format: date
        externalNotes:
          type: string
          description: External notes for the stay
        opsInformation:
          type: string
          description: Operational information for the stay
        additionalAccessInformation:
          type: string
          description: Additional access information for the stay
        inventoryType:
          type: string
          description: Type of inventory for the stay, must be either UNIT or UNIT_TYPE
          enum:
            - UNIT
            - UNIT_TYPE
        inventoryTypeId:
          type: integer
          description: >-
            Inventory Type Id for the stay, if inventory type is UNIT then this
            is the Unit Id, if inventory type is UNIT_TYPE then this is the Unit
            Type Id
          format: int64
        overriddenGross:
          type: number
          description: Overridden gross value for the stay, used to override the rate value
        promotionalCodeCode:
          type: string
          description: Promotional code for the stay
        numberOfAdults:
          type: integer
          description: Number of adults for the stay
          format: int32
        numberOfChildren:
          type: integer
          description: Number of children for the stay
          format: int32
        numberOfInfants:
          type: integer
          description: Number of infants for the stay
          format: int32
        additionalExtraIds:
          type: array
          description: Additional Extra Ids for the stay
          items:
            type: integer
            description: Additional Extra Ids for the stay
            format: int64
        guestIds:
          type: array
          description: >-
            Guest Ids for the stay, if not specified the booking contact will be
            used
          items:
            type: integer
            description: >-
              Guest Ids for the stay, if not specified the booking contact will
              be used
            format: int64
      description: List of room stays to be created on the booking
    BillingFrequencyDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the billing frequency
          format: int64
          example: 1
        name:
          type: string
          description: The name of the billing frequency
          example: Monthly
        code:
          type: string
          description: The code of the billing frequency
          example: M
        systemType:
          type: boolean
          description: The system type of the billing frequency
          example: true
      description: The billing frequency
    BookingDTO:
      type: object
      properties:
        id:
          type: integer
          description: The id of the booking
          format: int64
        bookingReference:
          type: string
          description: The booking reference
        bookingNet:
          type: number
          description: The booking net
        bookingVat:
          type: number
          description: The booking VAT
        bookingExtrasNet:
          type: number
          description: The booking extras net
        bookingExtrasVat:
          type: number
          description: The booking extras VAT
        commissionFromNetworkNet:
          type: number
          description: Commission from network net
        commissionFromNetworkVat:
          type: number
          description: Commission from network VAT
        commissionRateToAgent:
          type: number
          description: The commission rate to agent
        commissionFeeToAgent:
          type: number
          description: The commission fee to agent
        commissionToAgentNet:
          type: number
          description: The commission to agent net
        commissionToAgentVat:
          type: number
          description: Commission to agent VAT
        bookableOnline:
          type: boolean
          description: Whether it is bookable online
        billingFrequency:
          $ref: '#/components/schemas/BillingFrequencyDTO'
        bookingContact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        bookingAccount:
          $ref: '#/components/schemas/FinanceAccountDTO'
        billingAccount:
          $ref: '#/components/schemas/FinanceAccountDTO'
        channel:
          $ref: '#/components/schemas/ChannelSummaryDTO'
        customerReference:
          type: string
          description: The customer reference
        payOnArrival:
          type: boolean
          description: Whether to pay on arrival
        bookingTerms:
          $ref: '#/components/schemas/BookingTermsDTO'
        requestedLocation:
          type: string
          description: The requested location
        requestedUnitType:
          type: string
          description: The requested unit type
        webReference:
          type: string
          description: The web reference
        webBookingComplete:
          type: boolean
          description: Whether the web booking is complete
        quoteByArea:
          type: boolean
          description: Whether to quote by area
        siteminderCreated:
          type: boolean
          description: Whether it is created by siteminder
        rentalsUnitedCreated:
          type: boolean
          description: Whether it is created by rentals united
        agentCode:
          type: string
          description: The agent code
        channelCode:
          type: string
          description: The channel code
        otaBookingReference:
          type: string
          description: The OTA booking reference
        behalfOf:
          type: string
          description: Behalf of
        budgetPerNight:
          type: number
          description: The budget per night
        billingType:
          type: string
          description: The billing type
          enum:
            - ON_ACCOUNT
            - CREDIT_CARD
            - CASH_PAYMENT
            - BANK_PAYMENT
            - VIRTUAL_CARD
        emailTo:
          type: string
          description: Email to
          enum:
            - BOOKING_CONTACT
            - BOOKING_GUESTS
            - BOOKING_CONTACT_AND_GUESTS
        externalId:
          type: integer
          description: The external ID
          format: int32
        bookingType:
          $ref: '#/components/schemas/BookingTypeDTO'
        payableOnlineReference:
          type: integer
          description: The payable online reference
          format: int64
        referrer:
          $ref: '#/components/schemas/ReferrerDTO'
        bookingEnquiryData:
          $ref: '#/components/schemas/BookingEnquiryDataDTO'
        guarantor:
          $ref: '#/components/schemas/ContactSummaryDTO'
        billingContact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        overrideOrganisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        assignee:
          $ref: '#/components/schemas/UserDTO'
    BookingEnquiryDataDTO:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Booking Enquiry ID
          format: int64
        notes:
          type: string
          description: Notes for the booking enquiry
        billingAccountId:
          type: integer
          description: Billing Account ID
          format: int64
        bookingAccountId:
          type: integer
          description: Booking Account ID
          format: int64
        bookingContactId:
          type: integer
          description: Booking Contact ID
          format: int64
        billingFrequency:
          type: integer
          description: Billing Frequency ID
          format: int64
        referrerId:
          type: integer
          description: Referrer ID
          format: int64
        channelId:
          type: integer
          description: Channel ID
          format: int64
        commissionRate:
          type: number
          description: Commission Rate
        billingType:
          type: string
          description: Billing Type
        bookingCurrencyId:
          type: integer
          description: Booking Currency ID
          format: int64
        behalfOf:
          type: string
          description: Behalf Of
        bookingTypeId:
          type: integer
          description: Booking Type ID
          format: int64
        startDate:
          type: string
          description: Start Date
          format: date
        endDate:
          type: string
          description: End Date
          format: date
        requestedStartDate:
          type: string
          description: Requested Start Date
          format: date
        requestedEndDate:
          type: string
          description: Requested End Date
          format: date
        requestedUnitTypes:
          type: string
          description: Requested Unit Types
        requestedLocation:
          type: string
          description: Requested Location
        budgetPerNight:
          type: number
          description: Budget Per Night
        selectedLocations:
          type: string
          description: Selected Locations
        selectedUnitTypes:
          type: string
          description: Selected Unit Types
        selectedRatePlans:
          type: string
          description: Selected Rate Plans
        bestOrAllRates:
          type: boolean
          description: Best or All Rates
        promoCodeId:
          type: integer
          description: Promo Code ID
          format: int64
        soldOutEnquiry:
          type: boolean
          description: Sold Out Enquiry
        selectedFeatureIds:
          type: string
          description: Selected Feature IDs
        basket:
          type: string
          description: Basket
        customerReference:
          type: string
          description: Customer Reference
      description: The booking enquiry data
    BookingTermsDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the booking terms
          format: int64
        name:
          type: string
          description: The name of the booking terms
        payWhen:
          type: string
          description: The payment terms for the booking
          enum:
            - BOOKING_DATE
            - START_DATE
            - TWO_WEEKS_BEFORE_ARRIVAL
            - ON_BOOKING, ON_ARRIVAL, ON_DEPARTURE
        description:
          type: string
          description: The description of the booking terms
        firstInvoiceInvoiceDateOnStartDate:
          type: boolean
          description: Indicates if the first invoice date is on the start date
        depositPercentageOfFirstInvoice:
          type: number
          description: The deposit percentage of the first invoice
        settlementTerms:
          $ref: '#/components/schemas/SettlementTermsConfigDTO'
      description: The booking terms
    ChannelSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Channel ID
          format: int64
          example: 1
        name:
          type: string
          description: Channel Name
          example: Booking.com
        channelType:
          type: string
          enum:
            - OTA
            - AGENT
            - GENERAL
            - OWNER
      description: The channel summary
    SettlementTermDTO:
      required:
        - settlementAction
        - settlementTrigger
        - settlementType
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the settlement term
          format: int64
          example: 1
        settlementType:
          type: string
          description: Type of the settlement term
          enum:
            - AUTOMATIC
            - MANUAL
        settlementAction:
          type: string
          description: Primary action of the settlement term
          enum:
            - CHARGE_STORED_CARD
            - GO_CARDLESS
            - STRIPE_BACS_DIRECT_DEBIT
            - CREATE_MOCK_RECEIPT
            - NONE
        settlementAction2:
          type: string
          description: Secondary action of the settlement term
          enum:
            - CHARGE_STORED_CARD
            - GO_CARDLESS
            - STRIPE_BACS_DIRECT_DEBIT
            - CREATE_MOCK_RECEIPT
            - NONE
        tokeniseCard:
          type: boolean
          description: Indicates if the card should be tokenized
        includeOutstandingInvoices:
          type: boolean
          description: Indicates if outstanding invoices should be included
        settlementTrigger:
          type: string
          description: Trigger for the settlement term
          enum:
            - TIME_OF_BOOKING
            - ARRIVAL
            - DEPARTURE
            - INVOICE_DUE_DATE
            - NA
        settlementOffsetDays:
          type: integer
          description: Offset days for the settlement term
          format: int64
        settlementOffsetHours:
          type: integer
          description: Offset hours for the settlement term
          format: int64
        settlementValueAccommodation:
          type: number
          description: Settlement value for accommodation
        settlementValueDeposit:
          type: number
          description: Settlement value for deposit
        settlementValueExtras:
          type: number
          description: Settlement value for extras
        payInAdvance:
          type: boolean
          description: Indicates if payment is in advance
        considerAllInvoiceLines:
          type: boolean
          description: Indicates if all invoice lines should be considered
      description: The ongoing settlement term
    SettlementTermsConfigDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the settlement terms configuration
          format: int64
        name:
          type: string
          description: The name of the settlement terms configuration
        initialSettlementTerm:
          $ref: '#/components/schemas/SettlementTermDTO'
        ongoingSettlementTerm:
          $ref: '#/components/schemas/SettlementTermDTO'
      description: The settlement terms configuration
    BookingNoteDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        booking:
          $ref: '#/components/schemas/BookingSummaryDTO'
        roomStay:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        note:
          type: string
        noteCategory:
          $ref: '#/components/schemas/NoteCategoryDTO'
    BookingPaymentCreateDTO:
      required:
        - amount
        - cardType
        - paymentReference
        - paymentType
      type: object
      properties:
        paymentReference:
          type: string
          description: The payment reference
        amount:
          type: number
          description: The payment amount in the currency of the booking
        paymentType:
          type: string
          description: The payment type, must be BANK_PAYMENT, CARD_PAYMENT or CASH_PAYMENT
        lastFour:
          type: string
          description: >-
            The last four digits of the card number (if applicable - required if
            card payment)
        cardType:
          type: string
          description: >-
            The card type (if applicable - required if card payment). Should one
            of the following: VISA_CREDIT, VISA_DEBIT, MASTERCARD,
            MASTERCARD_DEBIT, DELTA, MAESTRO, VISA_ELECTRON, AMERICAN_EXPRESS,
            DINERS_CLUB, JCB, PAYPAL
      description: The payment details
    ApiPageFinancialDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/FinancialDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ActivityNoteCreateRequest:
      type: object
      properties:
        note:
          type: string
        private:
          type: boolean
    ActivityNoteDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the activity note
          format: int64
        activity:
          $ref: '#/components/schemas/ActivitySummaryDTO'
        note:
          type: string
          description: Content of the note
        noteCategory:
          $ref: '#/components/schemas/NoteCategoryDTO'
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        created:
          type: string
          description: Creation timestamp of the note
          format: date-time
        createdBy:
          $ref: '#/components/schemas/UserSummaryDTO'
        updatedBy:
          $ref: '#/components/schemas/UserSummaryDTO'
        lastUpdated:
          type: string
          description: Timestamp of the last update
          format: date-time
        private:
          type: boolean
    ActivitySummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the activity
          format: int64
        subject:
          type: string
          description: Subject of the activity
        dueDate:
          type: string
          description: Due date of the activity
          format: date
        scheduledDate:
          type: string
          description: Scheduled date of the activity
          format: date-time
      description: Summary of the associated activity
    ExternalIdentifierUpdateDTO:
      required:
        - exportStatus
        - exportedDate
        - externalId
        - organisationSettingsId
      type: object
      properties:
        externalId:
          type: string
          description: External ID of the financial update
          example: ext-12345
        exportedDate:
          type: string
          description: Date when the financial update was exported
          format: date-time
        exportStatus:
          type: string
          description: Status of the export
          example: EXPORTED
          enum:
            - CREATED
            - EXPORTED
            - FAILED
            - IMPORTED
            - PENDING
            - SENT
            - SKIPPED
        organisationSettingsId:
          type: integer
          description: The organisation id
          format: int64
          example: 1
      description: Financial update details
    FinancialUpdateDTO:
      required:
        - exportedDate
        - externalId
      type: object
      properties:
        externalId:
          type: string
          description: External ID of the financial update
          example: ext-12345
        exportedDate:
          type: string
          description: Date when the financial update was exported
          format: date-time
      description: Financial update details
    LocalTime:
      type: object
      properties:
        hour:
          type: integer
          format: int32
        minute:
          type: integer
          format: int32
        second:
          type: integer
          format: int32
        nano:
          type: integer
          format: int32
      description: Estimated departure time
    RateSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the rate
          format: int64
        rateCode:
          type: string
          description: Code of the rate
        rateType:
          type: string
          description: Type of the rate
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
        name:
          type: string
          description: Name of the rate
      description: Rate summary of the room stay
    RoomStayDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the room stay
          format: int64
        rate:
          $ref: '#/components/schemas/RateSummaryDTO'
        startDate:
          type: string
          description: Start date of the room stay
          format: date
        endDate:
          type: string
          description: End date of the room stay
          format: date
        estimatedArrivalTime:
          $ref: '#/components/schemas/LocalTime'
        estimatedDepartureTime:
          $ref: '#/components/schemas/LocalTime'
        earlyCheckIn:
          type: boolean
          description: Indicates if early check-in is allowed
        lateCheckOut:
          type: boolean
          description: Indicates if late check-out is allowed
        externalNotes:
          type: string
          description: External notes for the room stay
        opsInformation:
          type: string
          description: Operational information
        additionalAccessInformation:
          type: string
          description: Additional access information
        booking:
          $ref: '#/components/schemas/BookingSummaryDTO'
        roomStayStatus:
          type: string
          description: Status of the room stay
          enum:
            - ENQUIRY
            - QUOTED
            - PENDING
            - MEDIATION_REQUIRED
            - CONFIRMED
            - CHECKED_IN
            - CHECKED_OUT
            - COMPLETE
            - CANCELLED
            - LOST
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        originalUnit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        unitType:
          $ref: '#/components/schemas/UnitTypeSummaryDTO'
        discountNet:
          type: number
          description: Net discount amount
        discountRate:
          type: number
          description: Discount rate
        buyPrice:
          type: number
          description: Buy price
        baseBuyPrice:
          type: number
          description: Base buy price
        reportingBuyPrice:
          type: number
          description: Reporting buy price
        agencyCommission:
          type: number
          description: Agency commission
        discountDailyRate:
          type: number
          description: Discount daily rate
        vatInclusive:
          type: boolean
          description: Indicates if VAT is inclusive
        holdUntil:
          type: string
          description: Hold until date and time
          format: date-time
        extendUntil:
          type: string
          description: Extend until date and time
          format: date-time
        expiresAt:
          type: string
          description: Expiration date and time
          format: date-time
        extensionOf:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        netAmount:
          type: number
          description: Net amount
        baseNetAmount:
          type: number
          description: Base net amount
        reportingNetAmount:
          type: number
          description: Reporting net amount
        vatAmount:
          type: number
          description: VAT amount
        baseVatAmount:
          type: number
          description: Base VAT amount
        reportingVatAmount:
          type: number
          description: Reporting VAT amount
        vatProfile:
          $ref: '#/components/schemas/VatProfileDTO'
        lastStatus:
          type: string
          description: Last status of the room stay
          enum:
            - ENQUIRY
            - QUOTED
            - PENDING
            - MEDIATION_REQUIRED
            - CONFIRMED
            - CHECKED_IN
            - CHECKED_OUT
            - COMPLETE
            - CANCELLED
            - LOST
        lastStatusChangeDate:
          type: string
          description: Last status change date and time
          format: date-time
        conversionDate:
          type: string
          description: Conversion date and time
          format: date-time
        numberOfGuests:
          type: integer
          description: Number of guests
          format: int64
        bookableOnline:
          type: boolean
          description: Indicates if the room stay is bookable online
        identifier:
          type: string
          description: Identifier
        clientPrice:
          type: number
          description: Client price
        baseClientPrice:
          type: number
          description: Base client price
        reportingClientPrice:
          type: number
          description: Reporting client price
        accommodationProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        promotionalCodeType:
          type: string
          description: Promotional code type
          enum:
            - DAILY_PERCENTAGE
        promotionalCodeAmount:
          type: number
          description: Promotional code amount
        promotionalCodeCode:
          type: string
          description: Promotional code
        promotionalCodeDescription:
          type: string
          description: Promotional code description
        splitBooking:
          type: boolean
          description: Indicates if the booking is split
        lockRoomStay:
          type: boolean
          description: Indicates if the room stay is locked
        currency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        baseCurrency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        buyCurrency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        extensionOfOriginal:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        originalRate:
          type: number
          description: Original rate
        confirmedDate:
          type: string
          description: Confirmed date and time
          format: date-time
        lostReasonNote:
          type: string
          description: Lost reason note
        lostReason:
          $ref: '#/components/schemas/ReasonDTO'
        billingAccountOverride:
          $ref: '#/components/schemas/FinanceAccountDTO'
        overnightGuestCount:
          type: integer
          description: Overnight guest count
          format: int32
        contractSignedDate:
          type: string
          description: Contract signed date and time
          format: date-time
        depositAmount:
          type: number
          description: Deposit amount
        numberOfAdults:
          type: integer
          description: Number of adults
          format: int32
        numberOfChildren:
          type: integer
          description: Number of children
          format: int32
        numberOfInfants:
          type: integer
          description: Number of infants
          format: int32
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
    Pageable:
      type: object
      properties:
        page:
          minimum: 0
          type: integer
          format: int32
        size:
          minimum: 1
          type: integer
          format: int32
        sort:
          type: array
          items:
            type: string
    ApiPageUserListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UserListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    UserListItemProjection:
      type: object
      properties:
        userName:
          type: string
          description: The username of the user
        firstName:
          type: string
          description: The first name of the user
        lastName:
          type: string
          description: The last name of the user
        id:
          type: integer
          description: The unique identifier of the user
          format: int64
    ApiPageUnitListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    UnitListItemProjection:
      type: object
      properties:
        unitTypeName:
          type: string
          description: Type name of the unit
        unitName:
          type: string
          description: Name of the unit
        buildingName:
          type: string
          description: Name of the building
        addressLine1:
          type: string
          description: First line of the address
        addressLine2:
          type: string
          description: Second line of the address
        city:
          type: string
          description: City of the unit
        bookable:
          type: boolean
          description: Whether the unit is bookable
        postCode:
          type: string
          description: Postcode of the unit
        id:
          type: integer
          description: ID of the unit
          format: int64
    ApiPageUnitInternalLocationDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitInternalLocationDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    FeatureFacilityDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the feature/facility
          format: int64
          example: 1
        category:
          type: string
          description: Category of the feature/facility
          example: Amenity
        iconClass:
          type: string
          description: CSS class name for the feature/facility icon
          example: icon-wifi
        name:
          type: string
          description: Name of the feature/facility in primary language
          example: Wi-Fi
        nameLang2:
          type: string
          description: Name of the feature/facility in secondary language
          example: Wi-Fi
        nameLang3:
          type: string
          description: Name of the feature/facility in tertiary language
          example: WLAN
        nameLang4:
          type: string
          description: Name of the feature/facility in quaternary language
          example: Wi-Fi
        nameLang5:
          type: string
          description: Name of the feature/facility in quinary language
          example: Wi-Fi
      description: >-
        Data Transfer Object representing a feature or facility available within
        a unit's internal location
    InternalLocationDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the internal location
          format: int64
          example: 1
        name:
          type: string
          description: Name of the internal location
          example: Master Bedroom
        type:
          type: string
          description: >-
            Type of the internal location. Can be one of: BEDROOM, BATHROOM,
            LIVING_ROOM, KITCHEN, DINING_ROOM, HALL, GENERAL, WC,
            BEDROOM_OR_LIVING_ROOM_WITH_KITCHEN_CORNER,
            KITCHEN_IN_THE_LIVING_OR_DINING_ROOM
          example: BEDROOM
          enum:
            - BEDROOM
            - BATHROOM
            - LIVING_ROOM
            - KITCHEN
            - DINING_ROOM
            - HALL
            - GENERAL
            - WC
            - BEDROOM_OR_LIVING_ROOM_WITH_KITCHEN_CORNER
            - KITCHEN_IN_THE_LIVING_OR_DINING_ROOM
        systemType:
          type: boolean
          description: Flag indicating whether this is a system-defined location type
          example: false
        primaryLocation:
          type: boolean
          description: Flag indicating whether this is designated as the primary location
          example: true
        category:
          type: string
          description: >-
            Category of the internal location. Can be either INTERNAL or
            EXTERNAL
          example: INTERNAL
          enum:
            - INTERNAL
            - EXTERNAL
      description: >-
        Data Transfer Object (DTO) for representing an InternalLocation entity.
        This class provides a simplified representation of InternalLocation for
        use in data exchange operations, such as API communication, while
        masking unnecessary internal details.
    UnitInternalLocationDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the unit internal location
          format: int64
          example: 1
        unit:
          $ref: '#/components/schemas/UnitSummaryDTO'
        internalLocation:
          $ref: '#/components/schemas/InternalLocationDTO'
        imagesAttachments:
          type: array
          description: List of image attachments associated with this internal location
          items:
            $ref: '#/components/schemas/UnitInternalLocationImageAttachmentDTO'
        featureFacilities:
          type: array
          description: List of features and facilities available in this internal location
          items:
            $ref: '#/components/schemas/FeatureFacilityDTO'
        sortOrder:
          type: integer
          description: Sort order for displaying this internal location in lists
          format: int32
          example: 1
        primaryImageUrl:
          type: string
          description: URL of the primary image for this internal location
          example: https://example.com/images/location1.jpg
      description: >-
        Data transfer object representing a unit's internal location with its
        associated properties and relationships
    UnitInternalLocationImageAttachmentDTO:
      type: object
      properties:
        relationType:
          type: string
          description: Type of relation for the image attachment
          example: INTERIOR
        isPrimary:
          type: boolean
          description: Indicates if this image is the primary one
          example: true
        sortOrder:
          type: integer
          description: Sort order for displaying images
          format: int32
          example: 1
          default: 0
        internalName:
          type: string
          description: Internal name for the image
          example: kitchen_view
        viewUrl:
          type: string
          description: URL to view the image
          example: https://example.com/image.jpg
      description: DTO representing an internal location image attachment for a unit
    ApiPageUnitContractDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitContractDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    UnitContractDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        contractType:
          type: string
          enum:
            - LEASE
            - OPERATING
        unitOwner:
          $ref: '#/components/schemas/CompanySummaryDTO'
        contractEndDate:
          type: string
          format: date
        bookableFrom:
          type: string
          format: date
        bookableTo:
          type: string
          format: date
        notes:
          type: string
        commissionRate:
          type: number
        commissionFee:
          type: number
        commissionFrequency:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - QUARTERLY
            - YEARLY
            - PER_BOOKING
        name:
          type: string
        minPriceType:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
        minPrice:
          type: number
        serviceFeeRate:
          type: number
        valid:
          type: boolean
    ApiPageUnitAccessGroupDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitAccessGroupDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageUnitTypeListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitTypeListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    UnitTypeListItemProjection:
      type: object
      properties:
        unitTypeName:
          type: string
          description: Name of the Unit Type
        buildingName:
          type: string
          description: Name of the Building
        buildingId:
          type: integer
          description: ID of the Building
          format: int64
        developmentId:
          type: integer
          description: ID of the Development
          format: int64
        developmentName:
          type: string
          description: Name of the Development
        id:
          type: integer
          description: ID of the Unit Type
          format: int64
    ApiPageUnitTypeImageDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitTypeImageDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageFeatureFacilityDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/FeatureFacilityDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageUnitDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageUnitAccessGroupProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitAccessGroupProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    UnitAccessGroupProjection:
      type: object
      properties:
        accessGroupId:
          type: integer
          description: ID of the Access Group
          format: int64
        accessGroupName:
          type: string
          description: Name of the Access Group
        unitName:
          type: string
          description: Name of the Unit
        unitId:
          type: integer
          description: ID of the Unit
          format: int64
        id:
          type: integer
          description: ID of the Unit Access Group
          format: int64
    ApiPageTeamListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/TeamListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    TeamListItemProjection:
      type: object
      properties:
        teamName:
          type: string
          description: Team Name
          example: Team A
        id:
          type: integer
          description: Team ID
          format: int64
          example: 1
    PageTagDTO:
      type: object
      properties:
        totalPages:
          type: integer
          format: int32
        totalElements:
          type: integer
          format: int64
        pageable:
          $ref: '#/components/schemas/PageableObject'
        numberOfElements:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        content:
          type: array
          items:
            $ref: '#/components/schemas/TagDTO'
        number:
          type: integer
          format: int32
        sort:
          type: array
          items:
            $ref: '#/components/schemas/SortObject'
        first:
          type: boolean
        last:
          type: boolean
        empty:
          type: boolean
    PageableObject:
      type: object
      properties:
        paged:
          type: boolean
        unpaged:
          type: boolean
        pageSize:
          type: integer
          format: int32
        pageNumber:
          type: integer
          format: int32
        offset:
          type: integer
          format: int64
        sort:
          type: array
          items:
            $ref: '#/components/schemas/SortObject'
    SortObject:
      type: object
      properties:
        direction:
          type: string
        nullHandling:
          type: string
        ascending:
          type: boolean
        property:
          type: string
        ignoreCase:
          type: boolean
    TagDTO:
      type: object
      properties:
        id:
          type: integer
          description: The id of the tag
          format: int64
        name:
          type: string
          description: The name of the tag
        tagType:
          $ref: '#/components/schemas/TagTypeDTO'
        sortOrder:
          type: integer
          description: The sort order of the tag
          format: int32
    TagTypeDTO:
      type: object
      properties:
        id:
          type: integer
          description: The id of the tag type
          format: int64
        name:
          type: string
          description: The name of the tag type
        description:
          type: string
          description: The description of the tag type
        category:
          type: string
          description: The category of the tag type
          enum:
            - ACTIVITIES
            - BOOKING
            - CRM_COMPANY
            - CRM_CONTACT
            - ISSUES
            - GLOBAL
            - PROPERTY_UNITS
            - WORKSHEETS
            - ROOM_STAY
      description: The type of the tag
    ApiPageSalesInvoiceListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/SalesInvoiceListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    CompanyProjection:
      type: object
      properties:
        companyName:
          type: string
          description: Name of the company
        id:
          type: integer
          description: Unique identifier of the company
          format: int64
      description: The company of the account
    ContactProjection:
      type: object
      properties:
        telephoneNumber:
          type: string
          description: Telephone number of the contact
        firstName:
          type: string
          description: First name of the contact
        lastName:
          type: string
          description: Last name of the contact
        emailAddress:
          type: string
          description: Email address of the contact
        id:
          type: integer
          description: Unique identifier of the contact
          format: int64
      description: The name of the account
    FinanceAccountProjection:
      type: object
      properties:
        accountCode:
          type: string
          description: The code of the account
        contact:
          $ref: '#/components/schemas/ContactProjection'
        company:
          $ref: '#/components/schemas/CompanyProjection'
        id:
          type: integer
          description: The unique identifier of the account
          format: int64
      description: The projected finance account
    SalesInvoiceListItemProjection:
      type: object
      properties:
        exportedDate:
          type: string
          description: The exported date of the invoice
          format: date-time
        exportStatus:
          type: string
          description: The status of the invoice export
        invoiceDate:
          type: string
          description: The date of the invoice
          format: date
        organisationSettingsId:
          type: integer
          description: The organisation settings id of the invoice
          format: int64
        net:
          type: number
          description: The net value of the invoice
        tax:
          type: number
          description: The tax value of the invoice
        invoiceNumber:
          type: integer
          description: The invoice number of the sales invoice
          format: int64
        financeAccount:
          $ref: '#/components/schemas/FinanceAccountProjection'
        externalId:
          type: string
          description: The external id of the invoice
        dueDate:
          type: string
          description: The due date of the invoice
          format: date
        status:
          type: string
          description: The status of the invoice
        id:
          type: integer
          description: The id of the sales invoice
          format: int64
    ApiPageSalesInvoiceItemDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/SalesInvoiceItemDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageBookingRoomStayListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BookingRoomStayListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    BookingRoomStayListItemProjection:
      type: object
      properties:
        channelName:
          type: string
          description: The name of the channel for the booking
        organisationSettingsName:
          type: string
          description: The name of the organisation for the room stay
        otaReference:
          type: string
          description: The ota reference for the booking
        organisationSettingsId:
          type: integer
          description: The id of the organisation for the room stay
          format: int64
        billingAccount:
          $ref: '#/components/schemas/FinanceAccountProjection'
        vatAmount:
          type: number
          description: The VAT amount of the room stay
        channelId:
          type: integer
          description: The id of the channel for the booking
          format: int64
        bookingTypeId:
          type: integer
          description: The id of the booking type
          format: int64
        customerReference:
          type: string
          description: The customer reference for the booking
        bookingContact:
          $ref: '#/components/schemas/ContactProjection'
        bookingReference:
          type: string
          description: The reference of the booking
        roomStayStatus:
          type: string
          description: The status of the room stay
        bookingAccount:
          $ref: '#/components/schemas/FinanceAccountProjection'
        roomStayId:
          type: integer
          description: The id of the room stay
          format: int64
        bookingId:
          type: integer
          description: The id of the booking
          format: int64
        startDate:
          type: string
          description: The start date of the room stay
          format: date
        endDate:
          type: string
          description: The end date of the room stay
          format: date
        netAmount:
          type: number
          description: The net amount of the room stay
        bookingType:
          type: string
          description: The type of the booking
        unit:
          $ref: '#/components/schemas/UnitSummaryProjection'
    UnitSummaryProjection:
      type: object
      properties:
        buildingName:
          type: string
          description: Unit Type ID
        name:
          type: string
          description: Unit Name
        id:
          type: integer
          description: Unit ID
          format: int64
      description: The unit of the room stay
    ApiPageContactDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContactDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageGuestStayDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/GuestStayDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    GuestStayDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the guest stay
          format: int64
        contact:
          $ref: '#/components/schemas/ContactSummaryDTO'
        roomStay:
          $ref: '#/components/schemas/RoomStaySummaryDTO'
        dateFrom:
          type: string
          description: Start date of the guest stay
          format: date
        dateTo:
          type: string
          description: End date of the guest stay
          format: date
        type:
          type: string
          description: Type of the guest stay
          enum:
            - BUSINESS
            - DIRECT
            - DAYTIME
            - OVERNIGHT
        status:
          type: string
          description: Status of the guest stay
          enum:
            - PENDING
            - CONFIRMED
            - CHECKED_IN
            - CHECKED_OUT
            - CANCELLED
            - LOST
        extensionOf:
          $ref: '#/components/schemas/GuestStayDTO'
    ApiPageCustomFieldDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/CustomFieldDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    CustomFieldDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        value:
          type: string
        objectName:
          type: string
        objectId:
          type: integer
          format: int64
        template:
          $ref: '#/components/schemas/CustomFieldTemplateDTO'
    CustomFieldTemplateDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        type:
          type: string
          enum:
            - DATE
            - DROPDOWN_LIST
            - FILE
            - LONG_TEXT
            - NUMBER
            - TEXT
            - URI
            - YES_OR_NO
        entityType:
          type: string
          enum:
            - BOOKING
            - BUILDING
            - CONTACT
            - COMPANY
            - UNIT
            - SALES_INVOICE
            - SALES_CREDIT
            - ROOM_STAY
        name:
          type: string
    ApiPageRoomStayExtraDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RoomStayExtraDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageActivityDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ActivityDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageRegionListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RegionListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    RegionListItemProjection:
      type: object
      properties:
        countryName:
          type: string
          description: Name of the country
        countryId:
          type: integer
          description: Unique identifier of the country
          format: int64
        regionName:
          type: string
          description: Name of the region
        id:
          type: integer
          description: Unique identifier of the region
          format: int64
    ApiPageReferrerDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ReferrerDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageRateDTOExtended:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RateDTOExtended'
        page:
          $ref: '#/components/schemas/PageMetadata'
    RateDTOExtended:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the rate
          format: int64
        rateCode:
          type: string
          description: Code of the rate
        rateType:
          type: string
          description: Type of the rate
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
        name:
          type: string
          description: Name of the rate
        shortName:
          type: string
          description: Short name of the rate
        ratePlan:
          $ref: '#/components/schemas/RatePlanSummaryDTO'
        rates:
          type: array
          description: List of rate segments
          items:
            $ref: '#/components/schemas/RateSegmentDTO'
        startDate:
          type: string
          description: Start date of the rate
          format: date
        endDate:
          type: string
          description: End date of the rate
          format: date
        rateNote:
          type: string
          description: Note for the rate
        accommodationProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        depositProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        advancePaymentProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        occupancyCount:
          type: integer
          description: Occupancy count for the rate
          format: int32
        currency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        derivedRate:
          $ref: '#/components/schemas/RateSummaryDTO'
        derivedRateOption:
          type: string
          description: Option for the derived rate
          enum:
            - FLAT
            - PERCENTAGE
        derivedValue:
          type: number
          description: Value of the derived rate
        bookingType:
          $ref: '#/components/schemas/BookingTypeDTO'
        leadTime:
          type: integer
          description: Lead time for the rate
          format: int32
        closedToArrivalAfter:
          type: integer
          description: Closed to arrival after
          format: int32
        derivedDefaultMinLos:
          type: number
          description: Default minimum length of stay for the derived rate
      description: Data Transfer Object for Rate entity including rates collection
    RatePlanSummaryDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        title:
          type: string
        description:
          type: string
        vatInclusive:
          type: boolean
        webDescription:
          type: string
        bookingTermsId:
          type: integer
          format: int64
      description: Summary of the rate plan
    RateSegmentDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the rate segment
          format: int64
        date:
          type: string
          description: Date of the rate segment
          format: date
        amount:
          type: number
          description: Amount for the rate segment
        bookable:
          type: boolean
          description: Indicates if the rate segment is bookable
        minStay:
          type: integer
          description: Minimum stay required for the rate segment
          format: int32
        closedToArrival:
          type: boolean
          description: Indicates if the rate segment is closed to arrival
        closedToDeparture:
          type: boolean
          description: Indicates if the rate segment is closed to departure
      description: List of rate segments
    ApiPageRateSegmentSnapshotDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RateSegmentSnapshotDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    RateSegmentSnapshotDTO:
      type: object
      properties:
        minStay:
          type: integer
          description: Minimum stay
          format: int32
        startDate:
          type: string
          description: Start date
          format: date
        amount:
          type: number
          description: Amount
    RateDTOBasic:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the rate
          format: int64
        rateCode:
          type: string
          description: Code of the rate
        rateType:
          type: string
          description: Type of the rate
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
        name:
          type: string
          description: Name of the rate
        shortName:
          type: string
          description: Short name of the rate
        ratePlan:
          $ref: '#/components/schemas/RatePlanSummaryDTO'
        startDate:
          type: string
          description: Start date of the rate
          format: date
        endDate:
          type: string
          description: End date of the rate
          format: date
        rateNote:
          type: string
          description: Note for the rate
        accommodationProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        depositProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        advancePaymentProduct:
          $ref: '#/components/schemas/ProductSummaryDTO'
        occupancyCount:
          type: integer
          description: Occupancy count for the rate
          format: int32
        currency:
          $ref: '#/components/schemas/CurrencySummaryDTO'
        derivedRate:
          $ref: '#/components/schemas/RateSummaryDTO'
        derivedRateOption:
          type: string
          description: Option for the derived rate
          enum:
            - FLAT
            - PERCENTAGE
        derivedValue:
          type: number
          description: Value of the derived rate
        bookingType:
          $ref: '#/components/schemas/BookingTypeDTO'
        leadTime:
          type: integer
          description: Lead time for the rate
          format: int32
        closedToArrivalAfter:
          type: integer
          description: Closed to arrival after
          format: int32
        derivedDefaultMinLos:
          type: number
          description: Default minimum length of stay for the derived rate
      description: Data Transfer Object for Rate entity, excludes detailed rate segments
    ApiPageUnitTypeSummaryDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/UnitTypeSummaryDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageRateSegmentDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/RateSegmentDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageOrganisationSettingsDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/OrganisationSettingsDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    OrganisationSettingsDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        account:
          $ref: '#/components/schemas/FinanceAccountDTO'
        stripeDetails:
          $ref: '#/components/schemas/StripeDetailsDTO'
        sagepayDetails:
          $ref: '#/components/schemas/SagepayDetailsDTO'
        xeroDetails:
          $ref: '#/components/schemas/XeroDetailsDTO'
        defaultOrganisation:
          type: boolean
        name:
          type: string
        currency:
          $ref: '#/components/schemas/CurrencyDTO'
        saltoRegisterEmailAddress:
          type: boolean
        separateInvoiceLedgers:
          type: boolean
        goCardlessBankNominalCode:
          $ref: '#/components/schemas/NominalCodeDTO'
        stripeBacsBankNominalCode:
          $ref: '#/components/schemas/NominalCodeDTO'
        goCardlessAccessToken:
          type: string
        goCardlessWebhookSecret:
          type: string
        uuid:
          type: string
        country:
          $ref: '#/components/schemas/CountryDTO'
    SagepayDetailsDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        spStoreTokens:
          type: boolean
        spUrl:
          type: string
        spVendor:
          type: string
        spThreeDSecureUrl:
          type: string
        spThreeDSecureCallBackUrl:
          type: string
        spThreeDSecureEInvoiceCallBackUrl:
          type: string
    StripeDetailsDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        publishKey:
          type: string
        secretKey:
          type: string
        connectedId:
          type: string
        connectedPercentage:
          type: number
      description: Data Transfer Object representing Stripe configuration details
    XeroDetailsDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        consumerKey:
          type: string
        consumerSecret:
          type: string
        pem:
          type: string
        tenantId:
          type: string
        cutoffDate:
          type: string
        financeAccountPrefix:
          type: string
        invoicePrefix:
          type: string
        creditNotePrefix:
          type: string
        purchaseInvoicePrefix:
          type: string
        purchaseCreditNotePrefix:
          type: string
        trackingCategoryId:
          type: string
        trackingCategoryName:
          type: string
        accountCodeLookup:
          type: boolean
        organisationShortCode:
          type: string
    ApiPageNoteCategoryDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/NoteCategoryDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageNationalityDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/NationalityDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageMarketSegmentDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/MarketSegmentDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageIssueListProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/IssueListProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    IssueListProjection:
      type: object
      properties:
        issueTypeId:
          type: integer
          description: The issue type ID
          format: int64
        assigneeUserId:
          type: integer
          description: The user ID of the assignee
          format: int64
        assigneeCompanyId:
          type: integer
          description: The company ID of the assignee
          format: int64
        assigneeTeamId:
          type: integer
          description: The team ID of the assignee
          format: int64
        lastUpdated:
          type: string
          description: The last time the issue was updated
          format: date-time
        issueStatus:
          type: string
          description: The status of the issue
        buildingId:
          type: integer
          description: The building ID associated with the issue
          format: int64
        responseTargetDate:
          type: string
          description: The target date for responding to the issue
          format: date-time
        resolutionTargetDate:
          type: string
          description: The target date for resolving the issue
          format: date-time
        timeOfReporting:
          type: string
          description: The time when the issue was reported
          format: date-time
        bookingId:
          type: integer
          description: The booking ID associated with the issue
          format: int64
        subject:
          type: string
          description: The subject of the issue
        unitId:
          type: integer
          description: The unit ID associated with the issue
          format: int64
        id:
          type: integer
          description: The unique identifier of the issue
          format: int64
    ApiPageIssueNote:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/IssueNote'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageIssueTypeDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/IssueTypeDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    IssueTypeDTO:
      required:
        - issuePriority
        - name
      type: object
      properties:
        id:
          type: integer
          description: ID of the issue type
          format: int64
        name:
          type: string
          description: Name of the issue type
        issuePriority:
          $ref: '#/components/schemas/IssuePrioritySummaryDTO'
        categoryIcon:
          type: string
          description: Category icon of the issue type
        typeIcon:
          type: string
          description: Type icon of the issue type
        assigneeTeam:
          $ref: '#/components/schemas/TeamSummaryDTO'
        assigneeUser:
          $ref: '#/components/schemas/UserSummaryDTO'
        assigneeCompany:
          $ref: '#/components/schemas/CompanySummaryDTO'
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
    ApiPageIssueStatus:
      type: object
      properties:
        content:
          type: array
          items:
            type: string
            enum:
              - OPEN
              - STARTED
              - RESOLVED
              - CLOSED
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageIssuePriorityDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/IssuePriorityDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    IssuePriorityDTO:
      required:
        - name
        - responseHours
        - slaHours
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the issue priority
          format: int64
        name:
          type: string
          description: Name of the issue priority
        responseHours:
          type: integer
          description: Response hours for the issue priority
          format: int32
        slaHours:
          type: integer
          description: SLA hours for the issue priority
          format: int32
    ApiPageIndustryDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/IndustryDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageGuestStayListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/GuestStayListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    GuestStayListItemProjection:
      type: object
      properties:
        bookingReference:
          type: string
          description: The booking reference associated with the Guest Stay.
        roomStayId:
          type: integer
          description: >-
            The unique identifier of the Room Stay entity associated with the
            Guest Stay.
          format: int64
        bookingId:
          type: integer
          description: >-
            The unique identifier of the Booking entity associated with the
            Guest Stay.
          format: int64
        status:
          type: string
          description: The status of the Guest Stay.
        firstName:
          type: string
          description: The first name of the guest.
        lastName:
          type: string
          description: The last name of the guest.
        unitId:
          type: integer
          description: The unique identifier of the Unit associated with the Guest Stay.
          format: int64
        dateFrom:
          type: string
          description: The start date of the Guest Stay.
          format: date
        dateTo:
          type: string
          description: The end date of the Guest Stay.
          format: date
        contactId:
          type: integer
          description: The unique identifier of the Contact associated with the Guest Stay.
          format: int64
        emailAddress:
          type: string
          description: The email address of the guest.
        id:
          type: integer
          description: The unique identifier of the Guest Stay entity.
          format: int64
    ApiPageChargeableExtraDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ChargeableExtraDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ChargeableExtraDTO:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the chargeable extra
          format: int64
          example: 1
        description:
          type: string
          description: Description of the chargeable extra
          example: Extra bed
        product:
          $ref: '#/components/schemas/ProductSummaryDTO'
        billing_frequency:
          type: string
          description: Billing frequency of the chargeable extra
          example: MONTHLY
          enum:
            - ONE_OFF
            - DAILY
            - WEEKLY
            - MONTHLY
        netPrice:
          type: number
          description: Net price of the chargeable extra
          example: 100
        vatProfile:
          $ref: '#/components/schemas/VatProfileDTO'
        allowDescriptionAmendment:
          type: boolean
          description: Flag indicating if description amendment is allowed
          example: true
        allowNetAmendment:
          type: boolean
          description: Flag indicating if net amendment is allowed
          example: true
        selectableInIBE:
          type: boolean
          description: Flag indicating if selectable in IBE
          example: true
        webDescription:
          type: string
          description: Web description of the chargeable extra
          example: Extra bed for children
        perGuestFee:
          type: boolean
          description: Flag indicating if the fee is per guest
          example: true
        webCategory:
          $ref: '#/components/schemas/WebCategoryDTO'
        descriptionLang2:
          type: string
          description: Description in second language
          example: Cama extra
        descriptionLang3:
          type: string
          description: Description in third language
          example: Lit supplémentaire
        descriptionLang4:
          type: string
          description: Description in fourth language
          example: Letto extra
        descriptionLang5:
          type: string
          description: Description in fifth language
          example: Zusatzbett
        vatInclusive:
          type: boolean
          description: Flag indicating if VAT is inclusive
          example: true
        building:
          $ref: '#/components/schemas/BuildingSummaryDTO'
        prepTimeUnit:
          type: string
          description: Preparation time unit for the chargeable extra
          example: HOURS
          enum:
            - MINUTES
            - HOURS
            - DAYS
            - WEEKS
            - MONTHS
        prepTimeValue:
          type: integer
          description: Preparation time value for the chargeable extra
          format: int64
          example: 2
        unitType:
          $ref: '#/components/schemas/UnitTypeSummaryDTO'
        petIncluded:
          type: boolean
          description: Flag indicating if pets are included
          example: true
        organisationSettings:
          $ref: '#/components/schemas/OrganisationSettingsSummaryDTO'
        includedInRate:
          type: boolean
          description: Flag indicating if the chargeable extra is included in the rate
          example: true
        includeAdults:
          type: boolean
          description: Flag indicating if adults are included
          example: true
        includeChildren:
          type: boolean
          description: Flag indicating if children are included
          example: true
        includeInfants:
          type: boolean
          description: Flag indicating if infants are included
          example: true
        lengthOfStay:
          type: number
          description: Length of stay for the chargeable extra
          example: 3
        pricingModel:
          type: string
          description: Indicates which pricing model to be used for the room stay extra
          enum:
            - UNIT_PRICE
            - LINKED_TO_ROOM_RATE
        percentageValue:
          type: number
          description: >-
            The percentage value of the room rate to be used if the room rate
            pricing model is enabled
        roomRateBasis:
          type: string
          description: >-
            Indicates if NET or GROSS room rate value is used if the room rate
            pricing model is enabled
          enum:
            - GROSS
            - NET
    WebCategoryDTO:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the category
          format: int64
          example: 1
        name:
          type: string
          description: The name of the category
          example: Web Development
      description: Web category associated with the chargeable extra
    ApiPageDevelopmentListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/DevelopmentListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    DevelopmentListItemProjection:
      type: object
      properties:
        areaId:
          type: string
        developmentName:
          type: string
          description: Name of the development entity
          example: The Residences at The Ritz-Carlton, Grand Cayman
        areaName:
          type: string
          description: Area name of the development entity
          example: Grand Cayman
        id:
          type: integer
          description: Unique identifier of the development entity
          format: int64
          example: 123456
    ApiPageDevelopmentImageDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/DevelopmentImageDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageCountryListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/CountryListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    CountryListItemProjection:
      type: object
      properties:
        countryName:
          type: string
          description: Name of the country
          example: United States
        id:
          type: integer
          description: ID of the country
          format: int64
          example: 1
    ApiPageCostCentreDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/CostCentreDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageContactListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContactListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ContactListItemProjection:
      type: object
      properties:
        companyId:
          type: integer
          description: Company ID of the contact
          format: int64
        accountId:
          type: string
          description: Account ID of the contact
        marketSegment:
          type: string
          description: Market segment of the contact
        telephoneNumber:
          type: string
          description: Telephone number of the contact
        accountCode:
          type: string
          description: Account code of the contact
        lifecycleStage:
          type: string
          description: Lifecycle stage of the contact
        companyName:
          type: string
          description: Company name of the contact
        addressLine1:
          type: string
          description: Address line 1 of the contact
        addressLine2:
          type: string
          description: Address line 2 of the contact
        status:
          type: string
          description: Status of the contact
        firstName:
          type: string
          description: First name of the contact
        lastName:
          type: string
          description: Last name of the contact
        city:
          type: string
          description: City of the contact
        referrer:
          type: string
          description: Referrer of the contact
        industry:
          type: string
          description: Industry of the contact
        postCode:
          type: string
          description: Post code of the contact
        emailAddress:
          type: string
          description: Email address of the contact
        id:
          type: integer
          description: ID of the contact
          format: int64
        source:
          type: string
          description: Source of the contact
    ApiPageContactNoteDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContactNoteDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageCompanyListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/CompanyListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    CompanyListItemProjection:
      type: object
      properties:
        accountId:
          type: integer
          description: Account ID associated with the company
          format: int64
        marketSegment:
          type: string
          description: Market segment of the company
        telephoneNumber:
          type: string
          description: Telephone number of the company
        accountCode:
          type: string
          description: Account code of the company
        lifecycleStage:
          type: string
          description: Lifecycle stage of the company
        companyName:
          type: string
          description: Name of the company
        addressLine1:
          type: string
          description: First line of the company's address
        addressLine2:
          type: string
          description: Second line of the company's address
        status:
          type: string
          description: Status of the company
        city:
          type: string
          description: City where the company is located
        referrer:
          type: string
          description: Referrer of the company
        industry:
          type: string
          description: Industry of the company
        postCode:
          type: string
          description: Postal code of the company's address
        emailAddress:
          type: string
          description: Email address of the company
        id:
          type: integer
          description: ID of the company
          format: int64
        source:
          type: string
          description: Source of the company
    ApiPageCityListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/CityListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    CityListItemProjection:
      type: object
      properties:
        regionId:
          type: integer
          format: int64
        cityName:
          type: string
          description: Name of the city
        regionName:
          type: string
        id:
          type: integer
          description: Unique identifier for the city
          format: int64
    ApiPageChannelDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ChannelDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ChannelDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        operator:
          $ref: '#/components/schemas/CompanySummaryDTO'
        commissionBasis:
          type: string
          enum:
            - GROSS
            - NET
        defaultCommissionRate:
          type: number
        bookingType:
          $ref: '#/components/schemas/BookingTypeDTO'
        channelType:
          type: string
          enum:
            - OTA
            - AGENT
            - GENERAL
            - OWNER
        commissionRequired:
          type: boolean
        availableToAll:
          type: boolean
        deductedAtSource:
          type: boolean
        vatProfile:
          $ref: '#/components/schemas/VatProfileDTO'
        commissionInvoiceType:
          type: string
          enum:
            - SALES_CREDIT
            - PURCHASE_INVOICE
            - DO_NOT_GENERATE
        includeCommissionInExtendedInvoiceDescription:
          type: boolean
        includeCommissionInFinancialExport:
          type: boolean
        vatIncludedInCommission:
          type: boolean
        autoPayDueInvoices:
          type: boolean
        autoPayDueInvoicesDaysBefore:
          type: integer
          format: int32
        systemType:
          type: boolean
    ApiPageBuildingListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BuildingListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    BuildingListItemProjection:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier of the building
          format: int64
        buildingName:
          type: string
          description: Name of the building
        addressLine1:
          type: string
          description: First line of the building's address
        addressLine2:
          type: string
          description: Second line of the building's address
        city:
          type: string
          description: City where the building is located
        postCode:
          type: string
          description: Postal code of the building
        developmentId:
          type: string
          description: Unique identifier of the development
        developmentName:
          type: string
          description: Name of the development
        areaId:
          type: string
          description: Unique identifier of the area
        areaName:
          type: string
          description: Name of the area
        cityId:
          type: string
          description: Unique identifier of the city where the building is located
        cityName:
          type: string
          description: Name of the city where the building is located
    ApiPageBuildingAccessCodeDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BuildingAccessCodeDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    BuildingAccessCodeDTO:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - GUEST
            - OPERATIONS
    ApiPageTagDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/TagDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageBookingNoteDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BookingNoteDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    BookingPriceBreakdown:
      type: object
      properties:
        total:
          $ref: '#/components/schemas/GrossNetVat'
        totalDueNow:
          $ref: '#/components/schemas/GrossNetVat'
        totalOutstanding:
          type: number
        currencySymbol:
          type: string
        currencyCode:
          type: string
    GrossNetVat:
      type: object
      properties:
        gross:
          type: number
        net:
          type: number
        vat:
          type: number
    ApiPageBookingTypeDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BookingTypeDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageBookingTermsDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BookingTermsDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageBillingFrequencyDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/BillingFrequencyDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPagePropertyRateAvailabilityDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/PropertyRateAvailabilityDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    DateInterval:
      type: object
      properties:
        dateFrom:
          type: string
          format: date
        dateTo:
          type: string
          format: date
      description: Date interval for the rate
    ExtraImage:
      type: object
      properties:
        type:
          type: string
          enum:
            - GENERAL
        url:
          type: string
        name:
          type: string
        thirdPartyUrl:
          type: string
    Extras:
      type: object
      properties:
        id:
          type: integer
          format: int64
        description:
          type: string
        descriptionTranslations:
          type: array
          items:
            $ref: '#/components/schemas/LocaleTranslation'
        gross:
          type: number
        net:
          type: number
        grossNetVat:
          $ref: '#/components/schemas/GrossNetVat'
        webDescription:
          type: string
        frequency:
          type: string
        webCategory:
          type: string
        compulsory:
          type: boolean
        building:
          type: string
        unitType:
          type: string
        images:
          type: array
          items:
            $ref: '#/components/schemas/ExtraImage'
        lengthOfStay:
          type: number
        pricingModel:
          type: string
        percentageValue:
          type: number
        roomRateBasis:
          type: string
        dueNowGrossNetVat:
          $ref: '#/components/schemas/GrossNetVat'
      description: List of compulsory extras included in the rate
    LocaleTranslation:
      type: object
    PropertyRateAvailabilityDTO:
      type: object
      properties:
        inventoryType:
          type: string
          description: Inventory type, can be UNIT or UNIT_TYPE
          example: UNIT
          enum:
            - UNIT
            - UNIT_TYPE
        inventoryTypeId:
          type: integer
          description: Inventory type ID, this is the ID of the Unit or Unit Type available
          format: int64
          example: 1
        inventoryTypeName:
          type: string
          description: >-
            Inventory type name, this is the name of the Unit or Unit Type
            available
          example: 1 Bedroom Apartment
        buildingId:
          type: integer
          description: >-
            Building ID, this is the ID of the building where the Unit or Unit
            Type is available
          format: int64
          example: 1
        buildingName:
          type: string
          description: >-
            Building name, this is the name of the building where the Unit or
            Unit Type is available
          example: Building 1
        rateAvailabilities:
          type: array
          description: List of rate availabilities for the Unit or Unit Type
          example: []
          items:
            $ref: '#/components/schemas/RateAvailabilityDTO'
    RateAvailabilityDTO:
      type: object
      properties:
        rateId:
          type: integer
          description: Rate ID
          format: int64
          example: 1
        rateCode:
          type: string
          description: Rate code
          example: SUMMER21
        description:
          type: string
          description: Description of the rate
          example: Summer Special Rate
        shortName:
          type: string
          description: Short name of the rate
          example: Summer Rate
        webDescription:
          type: string
          description: Web description of the rate
          example: Special summer rate with discounts
        interval:
          $ref: '#/components/schemas/DateInterval'
        priceFrom:
          $ref: '#/components/schemas/GrossNetVat'
        promoPriceFrom:
          $ref: '#/components/schemas/GrossNetVat'
        rateType:
          type: string
          description: Type of the rate
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
        nights:
          type: integer
          description: Number of nights
          format: int64
          example: 3
        priceFromInterval:
          type: number
          description: Price from interval
          example: 300
        totals:
          $ref: '#/components/schemas/GrossNetVat'
        avgTotals:
          $ref: '#/components/schemas/GrossNetVat'
        avgRate:
          type: number
          description: Average rate
          example: 100
        promoTotals:
          $ref: '#/components/schemas/GrossNetVat'
        promoAvgRate:
          type: number
          description: Promotional average rate
          example: 80
        promoCode:
          type: string
          description: Promotional code
          example: SUMMER21
        bookingTermsId:
          type: integer
          description: Booking terms ID
          format: int64
          example: 1
        bookingTerms:
          type: string
          description: Booking terms
          example: Non-refundable
        ratePlanIdentifier:
          type: string
          description: Rate plan identifier
          example: RP123
        currencySymbol:
          type: string
          description: Currency symbol
          example: $
        currencyCode:
          type: string
          description: Currency code
          example: USD
        primaryCurrencyPriceFrom:
          $ref: '#/components/schemas/GrossNetVat'
        tokeniseCard:
          type: boolean
          description: Tokenise card
          example: true
        dueNow:
          $ref: '#/components/schemas/GrossNetVat'
        extrasDueNow:
          $ref: '#/components/schemas/GrossNetVat'
        totalDeposit:
          $ref: '#/components/schemas/GrossNetVat'
        initialDeposit:
          type: number
          description: Initial deposit
          example: 50
        vatInclusive:
          type: boolean
          description: VAT inclusive
          example: true
        compulsoryExtras:
          type: array
          description: List of compulsory extras included in the rate
          items:
            $ref: '#/components/schemas/Extras'
      description: List of rate availabilities for the Unit or Unit Type
      example: []
    ApiPageAvailabilityIntervalDto:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/AvailabilityIntervalDto'
        page:
          $ref: '#/components/schemas/PageMetadata'
    AvailabilityIntervalDto:
      type: object
      properties:
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        available:
          type: boolean
    ApiPageAreaListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/AreaListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    AreaListItemProjection:
      type: object
      properties:
        cityId:
          type: integer
          format: int64
        cityName:
          type: string
        areaName:
          type: string
          description: Name of the area
        id:
          type: integer
          description: ID of the area
          format: int64
    ActivityListItemProjection:
      type: object
      properties:
        assigneeUserUserName:
          type: string
          description: Assignee User Username
          readOnly: true
        assigneeTeamName:
          type: string
          description: Assignee Team Name
          readOnly: true
        assigneeCompanyName:
          type: string
          description: Assignee Company Name
          readOnly: true
        assigneeUserId:
          type: integer
          description: Assignee User ID
          format: int64
          readOnly: true
        assigneeCompanyId:
          type: integer
          description: Assignee Company ID
          format: int64
          readOnly: true
        assigneeTeamId:
          type: integer
          description: Assignee Team ID
          format: int64
          readOnly: true
        unitName:
          type: string
          description: Unit Name
          readOnly: true
        issueId:
          type: integer
          description: Issue ID
          format: int64
          readOnly: true
        buildingName:
          type: string
          description: Building Name
          readOnly: true
        scheduledDate:
          type: string
          description: Scheduled Date
          format: date-time
          readOnly: true
        bookingReference:
          type: string
          description: Booking Reference
          readOnly: true
        buildingId:
          type: integer
          description: Building ID
          format: int64
          readOnly: true
        activityType:
          type: string
          description: Activity Type
          readOnly: true
        dueDate:
          type: string
          description: Due Date
          format: date
          readOnly: true
        bookingId:
          type: integer
          description: Booking ID
          format: int64
          readOnly: true
        status:
          type: string
          description: Status
          readOnly: true
        subject:
          type: string
          description: Subject
          readOnly: true
        unitId:
          type: integer
          description: Unit ID
          format: int64
          readOnly: true
        id:
          type: integer
          description: ID
          format: int64
          readOnly: true
    ApiPageActivityListItemProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ActivityListItemProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageActivityNoteDTO:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/ActivityNoteDTO'
        page:
          $ref: '#/components/schemas/PageMetadata'
    ApiPageSaltoAccessGroupProjection:
      type: object
      properties:
        content:
          type: array
          items:
            $ref: '#/components/schemas/SaltoAccessGroupProjection'
        page:
          $ref: '#/components/schemas/PageMetadata'
    SaltoAccessGroupProjection:
      type: object
      properties:
        externalIdentifier:
          type: string
          description: Access control system identifier for access group
        buildingName:
          type: string
          description: PMS internal building name
        buildingId:
          type: integer
          description: PMS internal building id
          format: int64
        name:
          type: string
          description: Name of access group
        id:
          type: integer
          description: Id of access group
          format: int64
  securitySchemes:
    OAuth2:
      type: oauth2
      description: >-
        Testing API - OAuth2 security scheme for API access. Use client
        credentials to obtain a token.
      flows:
        clientCredentials:
          scopes:
            api/read: Read access
            api/write: Write access
    X-Auth-Token:
      type: apiKey
      name: X-Auth-Token
      in: header
