openapi: 3.0.1
info:
  title: Bookings ONE External Api
  description: "Bookings ONE External API allow developers to interact with their team's data (such as locations, spaces, presence, etc.) and build third-party applications to extend Bookings ONE's capabilities.\r\n\r\n# Introduction\r\nThis API documents is an reference for integration with Bookings ONE server. These External APIs allow third party application to access Bookings one for data communication. There are serval scenarios that will highly depend on the Bookings ONE API integration, such as IoT sensor integration, access control integration, data analytics etc.\r\n\r\nAll these API are running in HTTPs RESTful request.\r\n\r\n# Authentication\r\n\r\nBookings ONE offers authentication through the API authentication:\r\n\r\nNavigate to `Management console -> Settings -> API authentication`, and create the API access token for authentication. \r\nThe Bookings ONE APIs use this access token to authenticate incoming requests. You can view and manage your access token in the Bookings ONE Management console.\r\n\r\n [Find out how to create access token for API authentication](/docs/management-console/settings/api-auth).\r\n\r\n\r\nThese access tokens contain many privileges, thus make sure to keep them secure and do not share these access token in public accessible site such as GitHub, client-side code, and so forth.\r\n\r\nAuthentication to the API is performed via HTTP Basic Auth. Provide your API key as the basic auth username value. You do not need to provide a password.\r\n\r\nIf you need to authenticate via bearer auth (e.g. for a cross-origin request), use \r\n\r\n```curl\r\n-H \"Authorization: XXXXXXXXXXXXXXXXXXXXXXXXX\".\r\n```\r\n\r\nAll API requests must be made over HTTPS. Calls made over plain HTTP will be auto redirect to HTTPS. API requests without authentication will be treated as fail and return 401 errors. Example:\r\n\r\n```curl\r\ncurl -v -L -H \"Authorization: XXXXXXXXXXXXXXXXXXXXXXXXX\" -H \"Content-Type: application/json\"  \"https://{your bookings one server address}/API/external/system/v1/information\"\r\n```\r\n\r\n# Security & Access control\r\nThere are serval security practices that can be done to protect your application from vicious network attack on the Bookings ONE integration:\r\n\r\n1. Access token will only show once when it is generated, and it will not be shown again in anywhere and anytime afterwards. After you refresh the page, if you have lost the key, you need to go back to the management console to regenerate a new token for replacement.\r\n\r\n2. If you have more than 1 application which would like to connect to Bookings ONE, you can create new keys for each application. Please do not use the same key for different applications.\r\n\r\n3. You can restrict the access by limiting the sender IP address. Following are the valid format:\r\n   - 225.154.33.1 \r\n   - 225.154.33.1-100\r\n   - 225.154.33.3, 225.154.33.100\r\n   - 225.154.33.0/24\r\n\r\n4. You can also set expire time to make sure the authentication key will not be effective for certain period of time.\r\n\r\n\r\n [Find out how to apply above setting for an access token](/docs/management-console/settings/api-auth).\r\n\r\n\r\n# Add new APIs\r\nIf you find out that the existing APIs are not enough for your use case, please send a email to hello@ones.software and provide further information of your case, we will consider to add new APIs to Bookings ONE to fit your story.\r\n"
  contact:
    name: Bookings ONE
    url: https://ones.software
    email: hello@ones.software
  version: v1
paths:
  /api/external/bookable-resource/{id}:
    get:
      tags:
        - BookableResource
      summary: Get bookable resource by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel
  /api/external/bookable-resource:
    get:
      tags:
        - BookableResource
      summary: Search bookable resources by pagination
      parameters:
        - name: id
          in: query
          description: Bookable resource ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: type
          in: query
          description: >-
            Bookable resource type, accept multiple separate by ',' , e.g.
            room,desk,equipment
          schema:
            type: string
        - name: category
          in: query
          description: >-
            Bookable resource category, accept multiple separate by ',' ,e.g.
            meetingRoom,phoneBooth
          schema:
            type: string
        - name: accessId
          in: query
          description: Bookable resource accessIds specified e.g. Room101,Desk101
          schema:
            type: string
        - name: isDeleted
          in: query
          description: Search if the bookable resource is deleted
          schema:
            type: boolean
        - name: searchText
          in: query
          description: Search by the bookable resource name
          schema:
            type: string
        - name: floorId
          in: query
          description: Search by the floor id e.g. 1,2,3 or null
          schema:
            type: string
        - name: minCapacity
          in: query
          description: Search where the capacity are larger than the value provided
          schema:
            type: integer
            format: int32
        - name: maxCapacity
          in: query
          description: Search where the capacity are less than the value provided
          schema:
            type: integer
            format: int32
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/bookable-resource/bookings/subscribe:
    post:
      tags:
        - BookableResource
      summary: Subscribe resource appointment change
      description: Subscribe any booking change on the booking resource
      requestBody:
        description: Specify the ID of Bookable resource. e.g. 1,2,3
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Incorrect bookable resource ID provided
  /api/external/bookable-resource/access-key:
    get:
      tags:
        - BookableResourceAccessKey
      summary: Search bookable resources by pagination
      parameters:
        - name: bookableResourceId
          in: query
          description: Bookable resource ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: type
          in: query
          description: Specify the type e.g. oneTime,static,daily
          schema:
            type: string
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: >-
                    #/components/schemas/Server.ExternalInterface.Features.BookableResource.AccessKey.BookableResourceAccessKeyViewModel
        '400':
          description: Incorrect parameter provided
  /api/external/bookable-resource/access-key/daily/subscribe:
    post:
      tags:
        - BookableResourceAccessKey
      summary: Subscribe resource appointment change
      description: Subscribe daily access key change on the booking resource
      requestBody:
        description: Specify the ID of Bookable resource. e.g. 1,2,3
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Incorrect bookable resource ID provided
  /api/external/bookable-resource/access-key/one-time/subscribe:
    post:
      tags:
        - BookableResourceAccessKey
      summary: Subscribe resource appointment change
      description: Subscribe daily access key change on the booking resource
      requestBody:
        description: Specify the ID of Bookable resource. e.g. 1,2,3
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Incorrect bookable resource ID provided
  /api/external/bookable-resource/player-content:
    get:
      tags:
        - BookableResourcePlayerContent
      summary: Search bookable resources by pagination
      parameters:
        - name: id
          in: query
          description: Bookable resource ids specified, e.g. 1,2,3
          schema:
            type: string
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: >-
                    #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel
        '400':
          description: Incorrect parameter provided
  /api/external/bookable-resource/player-content/subscribe:
    post:
      tags:
        - BookableResourcePlayerContent
      summary: Subscribe resource appointment change
      description: Subscribe any booking change on the booking resource
      requestBody:
        description: Specify the ID of Bookable resource. e.g. 1,2,3
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                type: string
        '400':
          description: Incorrect bookable resource ID provided
  /api/external/booking/resource-appointment:
    get:
      tags:
        - Booking
      summary: Get resource appointments
      description: Getting the appointment of bookable resources in Bookings ONE
      parameters:
        - name: id
          in: query
          description: ID of Appointments, accept multiple separate by ','
          schema:
            type: string
        - name: from
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: to
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: organizerUserId
          in: query
          description: >-
            ID of appointment organizer, accept multiple separate by ',' , e.g.
            1,2,3
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the appointment subject and content
          schema:
            type: string
        - name: bookingState
          in: query
          description: >-
            Specify the booking state, return all if this is not provided.
            accept multiple separate by ',' , e.g. booked,using,waitingCheckIn
          schema:
            type: string
        - name: bookableResourceId
          in: query
          description: >-
            ID of Bookable resource, accept multiple separate by ',' , e.g.
            1,2,3
          schema:
            type: string
        - name: bookableResourceType
          in: query
          description: >-
            Type of Bookable resource, accept multiple separate by ',', e.g.
            room, desk
          schema:
            type: string
        - name: bookingId
          in: query
          description: ID of booking, accept multiple separate by ',' , e.g. 1,2,3
          schema:
            type: string
        - name: excludePreparation
          in: query
          description: Exclude preparation appointments
          schema:
            type: boolean
        - name: page
          in: query
          description: page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: row
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/booking/export/by-bookable-resources:
    get:
      tags:
        - Booking
      summary: Export bookings by bookable resource to Excel
      description: "If no time zone is specified, UTC time is used\r\n            \r\n             Following API is still under construction. Will be released in coming version and the format may be changed based on development.."
      parameters:
        - name: From
          in: query
          description: Start time of the period
          schema:
            type: string
            format: date-time
            example: '2021-10-11T11:00:00+08:00'
          example: '2021-10-11T11:00:00+08:00'
        - name: To
          in: query
          description: End time of the period
          schema:
            type: string
            format: date-time
            example: '2021-10-11T14:00:00+08:00'
          example: '2021-10-11T14:00:00+08:00'
        - name: TimeZone
          in: query
          description: Time zone name
          schema:
            type: string
            example: Asia/Hong_Kong
          example: Asia/Hong_Kong
      responses:
        '200':
          description: Getting the correct result
        '400':
          description: Incorrect parameter provided
  /api/external/building/{id}:
    get:
      tags:
        - Building
      summary: Get building by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.Building.BuildingViewModel
  /api/external/building:
    get:
      tags:
        - Building
      summary: Search building by pagination
      parameters:
        - name: id
          in: query
          description: Building ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: isDeleted
          in: query
          description: Search if the building is deleted
          schema:
            type: boolean
        - name: searchText
          in: query
          description: Search by the building name
          schema:
            type: string
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Building.BuildingViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/dashboard/visitor-badge-statistics:
    get:
      tags:
        - Dashboard
      summary: Get daily visitor analytics result
      description: Getting the daily visitor analytics result of Bookings ONE
      parameters:
        - name: date
          in: query
          description: "Date contain two information `date` and the `offset`\r\n\r\nSince Bookings ONE are running in global server, it will not have information which the request's timezone are, it is necessary to specify the offset of your request timezone.\r\n            \r\n`time` value are not relevant at this case, just state the value as `00:00:00`.\r\n\r\nExample: `2022-01-05T00:00:00+08:00`"
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.Dashboard.VisitorBadgeStatisticsResponse
        '400':
          description: Incorrect date format provided
  /api/external/dashboard/v1/visitor-badge-statistics:
    get:
      tags:
        - Dashboard
      summary: Get daily visitor analytics result
      description: Getting the daily visitor analytics result of Bookings ONE
      parameters:
        - name: date
          in: query
          description: "Date contain two information `date` and the `offset`\r\n\r\nSince Bookings ONE are running in global server, it will not have information which the request's timezone are, it is necessary to specify the offset of your request timezone.\r\n            \r\n`time` value are not relevant at this case, just state the value as `00:00:00`.\r\n\r\nExample: `2022-01-05T00:00:00+08:00`"
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.Dashboard.VisitorBadgeStatisticsResponse
        '400':
          description: Incorrect date format provided
  /api/external/e-paper-controller/{id}:
    get:
      tags:
        - EPaperController
      summary: Get building by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel
  /api/external/e-paper-controller:
    get:
      tags:
        - EPaperController
      summary: Search building by pagination
      parameters:
        - name: id
          in: query
          description: EPaperController ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: isDeleted
          in: query
          description: Search if the building is deleted
          schema:
            type: boolean
        - name: type
          in: query
          description: >-
            E Paper controller type, accept multiple separate by ',' , e.g.
            qbicGateway or MinewServer
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the building name
          schema:
            type: string
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/e-paper-controller/tag/status:
    post:
      tags:
        - EPaperController
      summary: Search building by pagination
      requestBody:
        description: Update e-paper tag status request
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerUpdateTagStatusRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerUpdateTagStatusRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerUpdateTagStatusRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerUpdateTagStatusRequest
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Server.InterfaceBase.SuccessResponse'
        '400':
          description: Incorrect parameter provided
  /api/external/iot-device:
    get:
      tags:
        - IotDevice
      summary: Search iot devices by pagination
      parameters:
        - name: id
          in: query
          description: Iot device ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: accessId
          in: query
          description: Iot device accessIds specified e.g. Room101,Desk101
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the iot device name
          schema:
            type: string
        - name: bookableResourceId
          in: query
          description: Search by the bookable resource id e.g. 1,2,3 or null
          schema:
            type: string
        - name: isDeleted
          in: query
          description: Search if the iot device is deleted
          schema:
            type: boolean
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
    post:
      tags:
        - IotDevice
      summary: Create iot device
      requestBody:
        description: Iot device to be create
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
        '400':
          description: Incorrect parameter provided
  /api/external/iot-device/{id}:
    post:
      tags:
        - IotDevice
      summary: Update iot device
      parameters:
        - name: id
          in: path
          description: Iot device ids specified, e.g. 1,2,3
          required: true
          schema:
            type: string
      requestBody:
        description: Iot device to be create
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
        '400':
          description: Incorrect parameter provided
    get:
      tags:
        - IotDevice
      summary: Get iot device by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
  /api/external/iot-devices/v1/data:
    post:
      tags:
        - IotSensorData
      summary: Post occupancy sensor data
      description: Update the occupancy sensor occupancy information
      requestBody:
        description: Sensor data
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
      responses:
        '200':
          description: >-
            Returning a 200 status indicates that the information provided is
            received successfully
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.IotSensorDataViewModel
        '400':
          description: Incorrect information format provided
  /api/external/iot-devices/data:
    post:
      tags:
        - IotSensorData
      summary: Post occupancy sensor data
      description: Update the occupancy sensor occupancy information
      requestBody:
        description: Sensor data
        content:
          application/json-patch+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest
      responses:
        '200':
          description: >-
            Returning a 200 status indicates that the information provided is
            received successfully
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.IotDeviceData.IotSensorDataViewModel
        '400':
          description: Incorrect information format provided
  /api/external/service-item/{id}:
    get:
      tags:
        - ServiceItem
      summary: Get service item by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel
  /api/external/service-item:
    get:
      tags:
        - ServiceItem
      summary: Search service items by pagination
      parameters:
        - name: id
          in: query
          description: Service item ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: type
          in: query
          description: >-
            Service item type, accept multiple separate by ',' , e.g.
            betweenBooking,afterBooking
          schema:
            type: string
        - name: servicePlanId
          in: query
          description: Search by the service plan id id e.g. 1,2,3
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the bookable resource name
          schema:
            type: string
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/system/information:
    get:
      tags:
        - System
      summary: Get system information
      description: System information of Bookings ONE
      responses:
        '200':
          description: >-
            Returning a 200 status indicates that the information retrieval was
            made successfully
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.SystemViewModel
  /api/external/user/{id}:
    get:
      tags:
        - User
      summary: Get user by id
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.Users.UserViewModel
  /api/external/user:
    get:
      tags:
        - User
      summary: Search users by pagination
      parameters:
        - name: id
          in: query
          description: Service item ids specified, e.g. 1,2,3
          schema:
            type: string
        - name: userGroupId
          in: query
          description: Search by the user group id id e.g. 1,2,3
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the bookable resource name
          schema:
            type: string
        - name: isDeleted
          in: query
          description: Search if the bookable resource is deleted
          schema:
            type: boolean
        - name: page
          in: query
          description: Pages of request. If this is not provided, will return first page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: >-
            Number of rows for each page. If this is not provided, default value
            will be 50.
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Users.UserViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/visiting-appointment/search:
    get:
      tags:
        - VisitingAppointment
      summary: Search visitor appointment information
      description: Search the visitor appointment information
      parameters:
        - name: id
          in: query
          description: ID of Appointments, accept multiple separate by ','
          schema:
            type: string
        - name: from
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: to
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: invitingUserId
          in: query
          description: >-
            ID of appointment inviter, accept multiple separate by ',' , e.g.
            1,2,3
          schema:
            type: string
        - name: searchText
          in: query
          description: Search by the appointment subject and content
          schema:
            type: string
        - name: bookingState
          in: query
          description: >-
            Specify the booking state, return all if this is not provided.
            accept multiple separate by ',' , e.g. booked,using,waitingCheckIn
          schema:
            type: string
        - name: bookableResourceId
          in: query
          description: >-
            ID of Bookable resource, accept multiple separate by ',' , e.g.
            1,2,3
          schema:
            type: string
        - name: buildingId
          in: query
          description: ID of building, accept multiple separate by ',' , e.g. 1,2,3
          schema:
            type: string
        - name: visitorId
          in: query
          description: ID of visitor, accept multiple separate by ',' , e.g. 1,2,3
          schema:
            type: string
        - name: bookingId
          in: query
          description: ID of booking, accept multiple separate by ',' , e.g. 1,2,3
          schema:
            type: string
        - name: page
          in: query
          description: page
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          description: row
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
  /api/external/visitor-management/visitor-badge/{id}:
    get:
      tags:
        - VisitorManagement
      summary: Get visitor badge information
      description: Getting the visitor badge information by id / uid
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel
        '400':
          description: Incorrect parameter provided
  /api/external/visitor-management/visitor-badges:
    get:
      tags:
        - VisitorManagement
      summary: Search visitor badge information
      description: Search the visitor badge information
      parameters:
        - name: id
          in: query
          description: ID of Visitor badge, accept multiple separate by ',' e.g. 1,2,3
          schema:
            type: string
        - name: uid
          in: query
          description: UID of Visitor badge, accept multiple separate by ','
          schema:
            type: string
        - name: from
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: to
          in: query
          description: >-
            Specify the start time to search resource appointment, accept ISO
            8601 (2015-01-01T08:00:00+08:00) or string 'now'
          schema:
            type: string
        - name: registrationCode
          in: query
          description: >-
            Registration code of Visitor badge, accept multiple separate by ','
            e.g. ABCDEF,BCDEFG
          schema:
            type: string
        - name: buildingId
          in: query
          description: >-
            BuildingId of Visitor badge, accept multiple separate by ',' e.g.
            1,2,3
          schema:
            type: string
        - name: state
          in: query
          description: >-
            State of Visitor badge, accept multiple separate by ',' e.g.
            initial,noShow,visited,visiting
          schema:
            type: string
        - name: page
          in: query
          schema:
            type: integer
            format: int32
        - name: row
          in: query
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Getting the correct result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel,
                  Server.ExternalInterface, Version=2.11.3.0, Culture=neutral,
                  PublicKeyToken=null]]
        '400':
          description: Incorrect parameter provided
components:
  schemas:
    Server.Domain.Features.BookableResources.BookableResourceAccessKeys.BookableResourceAccessKeyTypes:
      enum:
        - 0
        - 1
        - 2
      type: integer
      format: int32
    Server.Domain.Features.BookableResources.BookableResources.BookableResourceCategories:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
        - 12
        - 13
        - 14
        - 15
        - 16
        - 17
        - 18
        - 19
        - 20
        - 21
        - 22
        - 23
        - 24
        - 25
        - 26
        - 27
        - 28
      type: integer
      format: int32
    Server.Domain.Features.BookableResources.BookableResources.BookableResourceTypes:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      format: int32
    Server.Domain.Features.Bookings.Appointments.AppearanceTypes:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      format: int32
    Server.Domain.Features.Bookings.AppointmentServices.BookingServiceItemLinkageStatus:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      format: int32
    Server.Domain.Features.Bookings.Bookings.BookingStates:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
        - 12
        - 13
      type: integer
      format: int32
    Server.Domain.Features.ServicePlans.ServiceItems.ServiceItemTypes:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
      type: integer
      format: int32
    Server.Domain.Features.VisitorManagement.VisitorBadge.VisitorBadgeStates:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      format: int32
    Server.Domain.Interfaces.ExternalInterface.BookableResourcePlayerContentStatus:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
      type: integer
      format: int32
    Server.Domain.Interfaces.ExternalInterface.BookableResourcePlayerSuggestColor:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      format: int32
    Server.ExternalInterface.Features.BookableResource.AccessKey.BookableResourceAccessKeyViewModel:
      type: object
      properties:
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResourceAccessKeys.BookableResourceAccessKeyTypes
        bookableResource:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.AccessKey.BookableResourceAccessKeyViewModel+BookableResourceViewModel
        accessUrl:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.AccessKey.BookableResourceAccessKeyViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Bookable resource Id
          format: int32
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Bookable resource Id
          format: int32
        accessId:
          type: string
          description: Access Id
          nullable: true
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: BookableResource name
          nullable: true
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResources.BookableResourceTypes
        category:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResources.BookableResourceCategories
        description:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Description
          nullable: true
        actualServiceItems:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+ServiceItemViewModel
          description: Service item belongs to the bookable resource
          nullable: true
        floor:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+FloorViewModel
        capacity:
          type: integer
          description: Floor of the resource
          format: int32
          nullable: true
        isDeleted:
          type: boolean
          description: Is the resource deleted
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+FloorViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Floor Id
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Floor name
          nullable: true
        building:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+FloorViewModel+BuildingViewModel
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+FloorViewModel+BuildingViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Building Id
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Building name
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel+ServiceItemViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Service item Id
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Service item name
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel:
      type: object
      properties:
        status:
          $ref: >-
            #/components/schemas/Server.Domain.Interfaces.ExternalInterface.BookableResourcePlayerContentStatus
        suggestColor:
          $ref: >-
            #/components/schemas/Server.Domain.Interfaces.ExternalInterface.BookableResourcePlayerSuggestColor
        bookableResource:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+BookableResourceViewModel
        currentAppointment:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+AppointmentViewModel
        nextAppointment:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+AppointmentViewModel
        statusWording:
          type: string
          nullable: true
        upcomingAppointments:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+AppointmentViewModel
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+AppointmentViewModel:
      type: object
      properties:
        id:
          type: string
          nullable: true
        subject:
          type: string
          nullable: true
        period:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel
        organizerDisplayName:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Bookable resource Id
          format: int32
        name:
          type: string
          description: BookableResource name
          nullable: true
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResources.BookableResourceTypes
        capacity:
          type: integer
          description: Floor of the resource
          format: int32
          nullable: true
        amenities:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+BookableResourceViewModel+AmenityViewModel
          description: Service item belongs to the bookable resource
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.BookableResource.PlayerContent.BookableResourcePlayerContentViewModel+BookableResourceViewModel+AmenityViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Floor Id
          format: int32
        name:
          type: string
          description: Floor name
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.CreateSubscriptionRequest:
      required:
        - callbackUrl
        - expireTime
        - ids
      type: object
      properties:
        ids:
          type: string
          description: Specify the ID to subscribe
          example: 1,2,3
        callbackUrl:
          type: string
          description: The url that will call back when there are any update from system
        expireTime:
          type: integer
          description: >-
            Expire time in minutes. Default value is 60, maximum value is 1440
            (1day)
          format: int32
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel:
      type: object
      properties:
        start:
          type: string
          description: Start time of the period
          format: date-time
          example: '2021-10-11T11:00:00+08:00'
        end:
          type: string
          description: End time of the period
          format: date-time
          example: '2021-10-11T14:00:00+08:00'
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel:
      type: object
      properties:
        id:
          type: string
          description: Appointment Id
          nullable: true
        subject:
          type: string
          description: Appointment Subject
          nullable: true
        isAllDay:
          type: boolean
          description: Is all day appointment
        textBody:
          type: string
          description: Appointment Text Body
          nullable: true
        appearanceType:
          $ref: >-
            #/components/schemas/Server.Domain.Features.Bookings.Appointments.AppearanceTypes
        bookableResource:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+BookableResourceViewModel
        organizer:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+OrganizerViewModel
        attendees:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+AttendeeViewModel
          nullable: true
        isPreparationAppointment:
          type: boolean
          description: Is preparation appointment
          example: 12
        period:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel
        booking:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+BookingViewModel
        services:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+ServiceViewModel
          description: Selected services
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+AttendeeViewModel:
      type: object
      properties:
        userId:
          type: integer
          description: User's Id
          format: int32
          nullable: true
          example: 3
        displayName:
          type: string
          description: User's display name
          nullable: true
          example: Room 101
        role:
          type: string
          description: "Role of the participant\r\n- RequiredAttendee\r\n- OptionalAttendee"
          nullable: true
          example: Organizer
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: BookableResource Id
          format: int32
          example: 3
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: BookableResource English name
          nullable: true
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResources.BookableResourceTypes
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+BookingViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Booking Id
          format: int32
          example: 3
        masterBookingId:
          type: integer
          description: Master booking Id, only exists for occurrence and exception
          format: int32
          nullable: true
        bookingState:
          $ref: >-
            #/components/schemas/Server.Domain.Features.Bookings.Bookings.BookingStates
        iCalUid:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+OrganizerViewModel:
      type: object
      properties:
        userId:
          type: integer
          description: User's Id
          format: int32
          nullable: true
          example: 3
        displayName:
          type: string
          description: User's display name
          nullable: true
          example: Room 101
        emailAddress:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+ServiceViewModel:
      type: object
      properties:
        id:
          type: string
          description: Linkage Id
          nullable: true
          example: '123321'
        status:
          $ref: >-
            #/components/schemas/Server.Domain.Features.Bookings.AppointmentServices.BookingServiceItemLinkageStatus
        serviceItem:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+ServiceViewModel+ServiceItemViewModel
        period:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel
      additionalProperties: false
    Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel+ServiceViewModel+ServiceItemViewModel:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.Building.BuildingViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Building Id
          format: int32
          example: 1
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Building English name
          nullable: true
        address:
          type: string
          nullable: true
        shortName:
          type: string
          nullable: true
        floors:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Building.BuildingViewModel+FloorViewModel
          nullable: true
        isDeleted:
          type: boolean
        order:
          type: integer
          format: int32
      additionalProperties: false
    Server.ExternalInterface.Features.Building.BuildingViewModel+FloorViewModel:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          nullable: true
        order:
          type: integer
          format: int32
      additionalProperties: false
    Server.ExternalInterface.Features.Dashboard.VisitorBadgeStatisticsResponse:
      type: object
      properties:
        numberOfInitial:
          type: integer
          description: Number of visitors which are not arrive and check in
          format: int32
          example: 10
        numberOfVisiting:
          type: integer
          description: Number of visitors which are check in and currently visiting
          format: int32
          example: 15
        numberOfVisited:
          type: integer
          description: Number of visitors which are checkout and left
          format: int32
          example: 6
        numberOfNoShow:
          type: integer
          description: >-
            Number of visitors which are no show, which means visitor didn't
            showing in the specified day
          format: int32
          example: 3
      additionalProperties: false
    Server.ExternalInterface.Features.EPaperController.EPaperControllerUpdateTagStatusRequest:
      type: object
      properties:
        batteryLevel:
          type: number
          description: Battery Level of the device
          format: double
          nullable: true
          example: 99
        screenSize:
          type: number
          description: ScreenSize
          format: double
          nullable: true
          example: 4
        isOnline:
          type: boolean
          description: Is the tag online
          example: true
        ePaperTagId:
          type: string
          description: Id of e paper tag
          nullable: true
          example: 'true'
      additionalProperties: false
    Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel:
      type: object
      properties:
        id:
          type: integer
          description: EPaperController Id
          format: int32
          example: 1
        name:
          type: string
          description: EPaperController name
          nullable: true
          example: EPaperController 1
        displayLanguage:
          type: string
          description: EPaperController display language
          nullable: true
          example: en-US
        tags:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel+TagViewModel
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel+TagViewModel:
      type: object
      properties:
        id:
          type: string
          nullable: true
        externalKey:
          type: string
          nullable: true
        bookableResource:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel+BookableResourceViewModel
      additionalProperties: false
    Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Bookable resource Id
          format: int32
        accessId:
          type: string
          description: Access Id
          nullable: true
        name:
          type: string
          description: IotDevice name
          nullable: true
        bookableResource:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel+BookableResourceViewModel
        isDeleted:
          type: boolean
          description: Is the iot device deleted
      additionalProperties: false
    Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Service item Id
          format: int32
      additionalProperties: false
    Server.ExternalInterface.Features.IotDeviceData.CreateIotSensorDataRequest:
      required:
        - accessId
      type: object
      properties:
        accessId:
          type: string
          description: Access ID of the related Iot Device
          example: 4GHUG6
        timestamp:
          type: string
          description: >-
            Time of the data collected by sensor. If empty, system will use the
            time data received by the system.
          format: date-time
          nullable: true
          example: '2022-01-12T12:23:02+08:00'
        data:
          type: object
          additionalProperties: {}
          description: "Data from occupancy sensor.\r\n\r\nThere are two data are required:\r\n\r\nisConnected `bool`:  which is specified for sensor is connected or not;\r\n\r\nisOccupied `bool`: which is specified for sensor is occupied or not;\r\n\r\nExample: \r\n{\r\n  \"isConnected\": true,\r\n  \"isOccupied\": true\r\n}"
          nullable: true
          example:
            isConnected: true
            isOccupied: true
      additionalProperties: false
    Server.ExternalInterface.Features.IotDeviceData.IotSensorDataViewModel:
      type: object
      properties:
        deviceId:
          type: integer
          description: Device ID of the system
          format: int32
          example: 10
        timestamp:
          type: string
          description: The date time when the data saved
          format: date-time
          example: '2022-01-12T12:23:02+08:00'
        data:
          type: object
          additionalProperties: {}
          description: Return the saved data
          nullable: true
          example:
            isConnected: true
            isOccupied: true
      additionalProperties: false
    Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Service item Id
          format: int32
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Service item name
          nullable: true
        description:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Description
          nullable: true
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.ServicePlans.ServiceItems.ServiceItemTypes
        isDeleted:
          type: boolean
          description: Is deleted
        actualAssignedUsers:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel+UserViewModel
          description: the service staffs assigned for the service item
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel+UserViewModel:
      type: object
      properties:
        id:
          type: integer
          description: User Id
          format: int32
        displayName:
          type: string
          description: User display name
          nullable: true
        emailAddress:
          type: string
          description: User emailAddress
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.SystemViewModel:
      required:
        - clientName
        - environment
        - name
        - version
      type: object
      properties:
        name:
          type: string
          description: System name
          example: Bookings ONE
        version:
          type: string
          description: Server version number of bookings one
          example: 2.2.0
        environment:
          type: string
          description: "Server Environment, such as:\r\n- Production\r\n- Testing\r\n- Development"
          example: Production
        clientName:
          type: string
          description: The license client name of the system.
          example: Happy Ltd.
      additionalProperties: false
      description: return the system information
    Server.ExternalInterface.Features.Users.UserViewModel:
      type: object
      properties:
        id:
          type: integer
          description: User Id
          format: int32
        displayName:
          type: string
          description: User's display name
          nullable: true
        emailAddress:
          type: string
          description: User's email address
          nullable: true
        userName:
          type: string
          description: User name
          nullable: true
        isActivated:
          type: boolean
          description: Is the user activated
        userGroups:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Users.UserViewModel+UserGroupViewModel
          description: User Groups of the user belong to
          nullable: true
        actualPermissions:
          type: array
          items:
            type: string
          description: >-
            All permission that the user have (include the permissions belong to
            user group
          nullable: true
        isDeleted:
          type: boolean
          description: Is deleted
      additionalProperties: false
    Server.ExternalInterface.Features.Users.UserViewModel+UserGroupViewModel:
      type: object
      properties:
        id:
          type: integer
          description: User group Id
          format: int32
        name:
          type: string
          description: User group name
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel:
      type: object
      properties:
        id:
          type: string
          description: Appointment Id
          nullable: true
        subject:
          type: string
          description: Appointment Subject
          nullable: true
        isAllDay:
          type: boolean
          description: Is all day appointment
        textBody:
          type: string
          description: Appointment Text Body
          nullable: true
        appearanceType:
          $ref: >-
            #/components/schemas/Server.Domain.Features.Bookings.Appointments.AppearanceTypes
        bookableResources:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BookableResourceViewModel
          description: BookableResources
          nullable: true
        buildings:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BuildingViewModel
          description: Buildings
          nullable: true
        invitingUser:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+InvitingUserViewModel
        visitors:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+VisitorViewModel
          nullable: true
        period:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel
        booking:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BookingViewModel
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BookableResourceViewModel:
      type: object
      properties:
        id:
          type: integer
          description: BookableResource Id
          format: int32
          example: 3
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: BookableResource English name
          nullable: true
        type:
          $ref: >-
            #/components/schemas/Server.Domain.Features.BookableResources.BookableResources.BookableResourceTypes
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BookingViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Booking Id
          format: int32
          example: 3
        masterBookingId:
          type: integer
          description: Master booking Id, only exists for occurrence and exception
          format: int32
          nullable: true
        bookingState:
          $ref: >-
            #/components/schemas/Server.Domain.Features.Bookings.Bookings.BookingStates
        iCalUid:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+BuildingViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Building Id
          format: int32
          example: 3
        name:
          type: array
          items:
            $ref: '#/components/schemas/Server.GraphQL.Graphs.BaseGraphs.I18NText'
          description: Building English name
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+InvitingUserViewModel:
      type: object
      properties:
        id:
          type: integer
          description: User's Id
          format: int32
          nullable: true
          example: 3
        displayName:
          type: string
          description: User's display name
          nullable: true
          example: Room 101
        emailAddress:
          type: string
          nullable: true
      additionalProperties: false
    Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel+VisitorViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Visitor's Id
          format: int32
          nullable: true
          example: 3
        displayName:
          type: string
          description: Visitor's display name
          nullable: true
          example: Room 101
      additionalProperties: false
    Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Visitor badge's ID
          format: int32
          example: 1
        uid:
          type: string
          description: >-
            Unique Id of the visitor badge, which is equal to the content of QR
            code generated by bookings one
          nullable: true
        period:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.Booking.DateTimeOffsetRangeViewModel
        registrationCode:
          type: string
          description: >-
            Visitor badge's registration code, same as the QR code show in
            visitor's badge
          nullable: true
          example: FJUEIW
        state:
          $ref: >-
            #/components/schemas/Server.Domain.Features.VisitorManagement.VisitorBadge.VisitorBadgeStates
        visitor:
          $ref: >-
            #/components/schemas/Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel+VisitorViewModel
        checkInDate:
          type: string
          description: >-
            visitor's check in time, if visitor didn't check in, will return
            null
          format: date-time
          nullable: true
          example: '2021-01-03T12:00:00+08:00'
        checkOutDate:
          type: string
          description: >-
            visitor's check out time, if visitor didn't check out, will return
            null
          format: date-time
          nullable: true
          example: '2021-01-03T14:00:00+08:00'
      additionalProperties: false
    Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel+VisitorViewModel:
      type: object
      properties:
        id:
          type: integer
          description: Visitor's id, unique for the system
          format: int32
        emailAddress:
          type: string
          description: Visitor's email address, will be null if visitor didn't input
          nullable: true
          example: john.smith@ones.software
        displayName:
          type: string
          description: Visitor's display name, will be null if visitor didn't input
          nullable: true
          example: John Smith
        mobileNumber:
          type: string
          description: Visitor's mobile number, will be null if visitor didn't input
          nullable: true
          example: 9324 0230
      additionalProperties: false
    Server.GraphQL.Graphs.BaseGraphs.I18NText:
      type: object
      properties:
        language:
          type: string
          nullable: true
        text:
          type: string
          nullable: true
      additionalProperties: false
    Server.InterfaceBase.PaginationMetaDataViewModel:
      type: object
      properties:
        total:
          type: integer
          format: int32
        row:
          type: integer
          format: int32
        page:
          type: integer
          format: int32
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.BookableResource.BookableResourceViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Booking.ResourceAppointmentViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Building.BuildingViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Building.BuildingViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.EPaperController.EPaperControllerViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.IotDevice.IotDeviceViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.ServiceItem.ServiceItemViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.Users.UserViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.Users.UserViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.VisitingAppointment.VisitingAppointmentViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.PaginationViewModel`1[[Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel, Server.ExternalInterface, Version=2.11.3.0, Culture=neutral, PublicKeyToken=null]]:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: >-
              #/components/schemas/Server.ExternalInterface.Features.VisitorManagement.VisitorBadgeViewModel
          nullable: true
        metaData:
          $ref: >-
            #/components/schemas/Server.InterfaceBase.PaginationMetaDataViewModel
      additionalProperties: false
    Server.InterfaceBase.SuccessResponse:
      type: object
      properties:
        isSuccess:
          type: boolean
      additionalProperties: false
tags:
  - name: System
    description: >-
      This section of APIs provide the common system information of Bookings
      ONE.
  - name: VisitorManagement
    description: >-
      This section of APIs provide the communication interface for information
      of visitor.
  - name: VisitingAppointment
    description: >-
      This section of APIs provide the communication interface for information
      of visiting appointment.
  - name: User
    description: >-
      This section of APIs provide the communication interface for information
      of users.
  - name: ServiceItem
    description: >-
      This section of APIs provide the communication interface for information
      of service item.
  - name: IotSensorData
    description: >-
      This section of APIs provide the communication interface for IoT sensor to
      Bookings ONE.
  - name: IotDevice
    description: >-
      This section of APIs provide the communication interface for information
      of iot device.
  - name: EPaperController
    description: >-
      This section of APIs provide the communication interface for information
      of building.
  - name: Dashboard
    description: >-
      This section of APIs provide the communication interface for information
      of various data analytics on dashboard.
  - name: Building
    description: >-
      This section of APIs provide the communication interface for information
      of building.
  - name: Booking
    description: >-
      This section of APIs provide the communication interface for booking
      information of bookable resource.
  - name: BookableResource
    description: >-
      This section of APIs provide the communication interface for information
      of bookable resource.
  - name: BookableResourcePlayerContent
    description: >-
      This section of APIs provide the communication interface for information
      of bookable resource.
  - name: BookableResourceAccessKey
    description: >-
      This section of APIs provide the communication interface for information
      of bookable resource.
