{
  "openapi": "3.0.0",
  "info": {
    "title": "TravelLine Partner APIs",
    "version": "1.0.0"
  },
  "servers": [],
  "paths": {
    "/v1/properties/{propertyId}/cancellation-rules": {
      "get": {
        "tags": [
          "CancellationRules"
        ],
        "summary": "Receive cancellation rules",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string",
              "example": "1024"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cancellation rules",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentApi_CancellationRulesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/properties": {
      "get": {
        "tags": [
          "ContentApi"
        ],
        "summary": "Receive property entity",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "description": "Key to continue viewing from the required spot\r\n\r\nThe number of accommodations in the response is limited, so you may not always be able to get them all within one request.\r\n\r\nTo continue from the spot you left off, use this option.\r\n\r\nThe value of this parameter can always be obtained from the response (‘next’ property).\r\n\r\nIf you do not specify this parameter, you will obtain accommodations from the very beginning of the list.\r\n\r\nAnalogue to pagination.",
            "schema": {
              "type": "string",
              "example": "UlUtNDE5NQ=="
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "The number of elements in the response.\r\n\r\nMaximum number of elements - 200 (default value)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 200
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Add additional information to the response\r\n\r\n‘All’ value: information about the hotel, room types, rate plans and services\r\n\r\nEmpty value: ‘Id’ only",
            "schema": {
              "type": "string",
              "example": ""
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code. Allowed values: 'en' (English).\r\n\r\nIf you do not specify this parameter, you will obtain accommodations in the property’s language.\r\n",
            "schema": {
              "type": "string",
              "example": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Detailed description of accommodations",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentApi_PropertyInfoPage"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/properties/{propertyId}": {
      "get": {
        "tags": [
          "ContentApi"
        ],
        "summary": "Receive description of a property",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string",
              "example": "1024"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code. Allowed values: 'en' (English).\r\n\r\nIf you do not specify this parameter, you will obtain accommodations in the property’s language.\r\n",
            "schema": {
              "type": "string",
              "example": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Property detailed information",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentApi_PropertyInfoType"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/meal-plans": {
      "get": {
        "tags": [
          "ContentApi"
        ],
        "summary": "Receive entity of possible meal options",
        "responses": {
          "200": {
            "description": "Meal entity",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ContentApi_MealPlan"
                  }
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/room-type-categories": {
      "get": {
        "tags": [
          "ContentApi"
        ],
        "summary": "Receive entity of possible room types",
        "responses": {
          "200": {
            "description": "Room type entity",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ContentApi_RoomTypeCategory"
                  }
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/room-amenity-categories": {
      "get": {
        "tags": [
          "ContentApi"
        ],
        "summary": "Receive entity of possible room amenities",
        "responses": {
          "200": {
            "description": "Receive entity of possible room amenities",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ContentApi_RoomAmenitiesCategories"
                  }
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/v1/properties/{propertyId}/extra-stay-rules": {
      "get": {
        "tags": [
          "ExtraStayRules"
        ],
        "summary": "Receive early check-in and late check-out rules",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string",
              "example": "1024"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Early check-in and late check-out rules",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentApi_ExtraStayRulesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/content/"
        }
      ]
    },
    "/corporates": {
      "post": {
        "tags": [
          "CorporateApi"
        ],
        "summary": "Creates a corporate client",
        "requestBody": {
          "description": "Corporate client creation entity",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferenceDataApi_CorporateRq"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferenceDataApi_CorporateRq"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferenceDataApi_CorporateRq"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceDataApi_CorporateRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reference-data/"
        }
      ]
    },
    "/corporates/{corporateId}": {
      "get": {
        "tags": [
          "CorporateApi"
        ],
        "summary": "Retrieves corporate client information",
        "parameters": [
          {
            "name": "corporateId",
            "in": "path",
            "description": "Identifier of the corporate client",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceDataApi_CorporateRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reference-data/"
        }
      ]
    },
    "/payment-methods": {
      "get": {
        "tags": [
          "PaymentMethods"
        ],
        "summary": "Get list of payment methods",
        "responses": {
          "200": {
            "description": "Payment methods",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceDataApi_PaymentMethodsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reference-data/"
        }
      ]
    },
    "/property-amenity-types": {
      "get": {
        "tags": [
          "PropertyAmenity"
        ],
        "summary": "Get list of property amenity types",
        "parameters": [
          {
            "name": "languageCode",
            "in": "query",
            "description": "Optional language code. Example: 'en' (English).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Property amenity types",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceDataApi_PropertyAmenityTypesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reference-data/"
        }
      ]
    },
    "/property-kinds": {
      "get": {
        "tags": [
          "PropertyKind"
        ],
        "summary": "Get list of property kinds",
        "parameters": [
          {
            "name": "languageCode",
            "in": "query",
            "description": "Optional language code. Example: 'en' (English).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Property kinds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceDataApi_PropertyKindsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reference-data/"
        }
      ]
    },
    "/v1/properties/{propertyId}/bookings": {
      "get": {
        "tags": [
          "Reservation"
        ],
        "summary": "Receive booking summaries",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "string"
            },
            "example": "1024"
          },
          {
            "name": "continueToken",
            "in": "query",
            "description": "Use the token from the previous response to continue receiving booking summaries including new and updated ones.<br />\r\nThe token must not request bookings modified earlier than 2009-01-01T00:00:00Z.<br />\r\nFor the first request, the parameter must be empty.",
            "style": "form",
            "schema": {
              "type": "string"
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          },
          {
            "name": "count",
            "in": "query",
            "description": "Maximum mumber of booking summaries in response.<br />\r\nThe maximum allowed value is 1000 (default).",
            "style": "form",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1000
          },
          {
            "name": "lastModification",
            "in": "query",
            "description": "Enumerate booking summaries based on the last modification datetime, starting from the specified datetime in UTC.<br />\r\nBookings can be requested starting from 2009-01-01T00:00:00Z.<br />\r\nFor subsequent requests, the parameter must be empty.<br />\r\nSpecifying both continueToken and lastModification results in an error.<br />\r\nIf neither continueToken nor lastModification is specified, a search for all bookings starting from 2009-01-01T00:00:00Z (a full sync) is initiated.",
            "style": "form",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2023-06-20T10:41:04Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Booking summary page",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservationApi_BookingsPage"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/read-reservation/"
        }
      ]
    },
    "/v1/properties/{propertyId}/bookings/{number}": {
      "get": {
        "tags": [
          "Reservation"
        ],
        "summary": "Receive booking details",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "string"
            },
            "example": "7291"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Booking number",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "string"
            },
            "example": "20240303-7291-14573801"
          }
        ],
        "responses": {
          "200": {
            "description": "Response with booking details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservationApi_GetBookingResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/read-reservation/"
        }
      ]
    },
    "/v1/properties/room-stays/search": {
      "post": {
        "tags": [
          "SearchRoomStays"
        ],
        "summary": "Search for the lowest priced accommodation options across all available accommodations.\r\nThe maximum number of accommodation to be searched - 200.",
        "requestBody": {
          "description": "Search parameters",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SimpleSearchCriteria"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SimpleSearchCriteria"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SimpleSearchCriteria"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Accommodation options found for all available accommodations",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchApi_AggregationSearchByPropertiesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/search/"
        }
      ]
    },
    "/v1/properties/{propertyId}/room-stays": {
      "get": {
        "tags": [
          "SearchRoomStays"
        ],
        "summary": "Search for accommodation options by specific accommodation",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Accommodation ID",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1024"
          },
          {
            "name": "arrivalDate",
            "in": "query",
            "description": "Check-in date.\r\n\r\nFormat complies with ISO-8601 YYYY-MM-DD",
            "required": true,
            "schema": {
              "type": "string",
              "example": "2026-08-24"
            }
          },
          {
            "name": "departureDate",
            "in": "query",
            "description": "Check-out date.\r\n\r\nFormat complies with ISO-8601 YYYY-MM-DD",
            "required": true,
            "schema": {
              "type": "string",
              "example": "2026-08-25"
            }
          },
          {
            "name": "adults",
            "in": "query",
            "description": "Number of adults",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1
          },
          {
            "name": "childAges",
            "in": "query",
            "description": "Child age range",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "corporateIds",
            "in": "query",
            "description": "Corporate clients identifiers to identify corporate clients\r\n\r\n            Rate plans for requested corporate clients to be included in the search results",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result of a search for accommodation options by accommodation in general.<br/>Includes accommodation and services that can be used when booking",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchApi_SearchByPropertyResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/search/"
        }
      ]
    },
    "/v1/properties/{propertyId}/services": {
      "post": {
        "tags": [
          "SearchRoomStays"
        ],
        "summary": "Search for extra services by accommodation conditions",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Accommodation ID",
            "required": true,
            "schema": {
              "type": "string",
              "example": "1024"
            }
          }
        ],
        "requestBody": {
          "description": "Search parameters",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchServicesCriteria"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchServicesCriteria"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchServicesCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Result of a search for extra services by accommodation conditions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchApi_SearchExtraServicesByPropertyResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/search/"
        }
      ]
    },
    "/v1/properties/{propertyId}/extra-stays": {
      "post": {
        "tags": [
          "SearchRoomStays"
        ],
        "summary": "Search for extra stays by accommodation conditions",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Accommodation ID",
            "required": true,
            "schema": {
              "type": "string",
              "example": "1024"
            }
          }
        ],
        "requestBody": {
          "description": "Search parameters",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchExtraStaysCriteria"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchExtraStaysCriteria"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SearchApi_SearchExtraStaysCriteria"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Result of a search for extra stays by accommodation conditions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchApi_SearchExtraStaysByPropertyResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/search/"
        }
      ]
    },
    "/v2/properties/{propertyId}/obtain-accommodation-inventory": {
      "get": {
        "tags": [
          "Property"
        ],
        "summary": "Retrieves the accommodation inventory for a property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ObtainAccommodationInventoryResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/companies": {
      "get": {
        "tags": [
          "PropertyCompany"
        ],
        "summary": "Retrieves the list of companies for a property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindCompaniesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/search": {
      "get": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Searches guest profiles by name, phone or room number.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "phone",
            "in": "query",
            "description": "Partial phone number to match",
            "schema": {
              "type": "string",
              "example": "91390"
            },
            "example": "91390"
          },
          {
            "name": "roomName",
            "in": "query",
            "description": "Room/suite display name.",
            "schema": {
              "type": "string",
              "example": "111"
            },
            "example": "111"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Partial first or last name to match",
            "schema": {
              "type": "string",
              "example": "Jo"
            },
            "example": "Jo"
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "ISO 639-1 language code. Supported: en, ru, bg, cs, fr, id, ka, km, ko, pl, th, tr, uk, uz, vi.",
            "schema": {
              "type": "string",
              "example": "en"
            },
            "example": "en"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindGuestsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}/loyalty-cards": {
      "get": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Retrieves basic loyalty card details for a guest.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindGuestLoyaltyCardsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}": {
      "get": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Retrieves a guest profile by its PMS identifier.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "ISO 639-1 language code. Supported: en, ru, bg, cs, fr, id, ka, km, ko, pl, th, tr, uk, uz, vi.",
            "schema": {
              "type": "string",
              "example": "en"
            },
            "example": "en"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_GetGuestResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}/find-occupied-room-stays": {
      "get": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Retrieves the list of stays for a given guest.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindGuestRoomStaysResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}/personal-document": {
      "put": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Updates guest’s identity document details.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestPersonalDocumentRequest"
                  }
                ],
                "description": "Request to set guest identity document details"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestPersonalDocumentRequest"
                  }
                ],
                "description": "Request to set guest identity document details"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestPersonalDocumentRequest"
                  }
                ],
                "description": "Request to set guest identity document details"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}/birth-address": {
      "put": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Updates guest's place of birth details.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestBirthAddressRequest"
                  }
                ],
                "description": "Request to set guest’s country of birth"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestBirthAddressRequest"
                  }
                ],
                "description": "Request to set guest’s country of birth"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetGuestBirthAddressRequest"
                  }
                ],
                "description": "Request to set guest’s country of birth"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/guests/{pmsPersonId}/personal-document/files": {
      "post": {
        "tags": [
          "PropertyGuest"
        ],
        "summary": "Uploads guest’s identity document scan files.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "pmsPersonId",
            "in": "path",
            "description": "Guest identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599627465719"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_AddGuestPersonalDocumentFilesRequest"
                  }
                ],
                "description": "Request to upload one or more guest identity document files"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_AddGuestPersonalDocumentFilesRequest"
                  }
                ],
                "description": "Request to upload one or more guest identity document files"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_AddGuestPersonalDocumentFilesRequest"
                  }
                ],
                "description": "Request to upload one or more guest identity document files"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}": {
      "get": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Retrieves reservation details by reservation number.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "ISO 639-1 language code. Supported: en, ru, bg, cs, fr, id, ka, km, ko, pl, th, tr, uk, uz, vi.",
            "schema": {
              "type": "string",
              "example": "en"
            },
            "example": "en"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_GetReservationResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/search": {
      "get": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Searches reservations by parameters; at least one time period must be specified.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "roomId",
            "in": "query",
            "description": "Room/suite identifier",
            "schema": {
              "type": "string",
              "example": "4503599627373585"
            },
            "example": "4503599627373585"
          },
          {
            "name": "state",
            "in": "query",
            "description": "Reservation status filter (\"Active\" or \"Cancelled\")",
            "required": true,
            "schema": {
              "type": "string",
              "example": "Active"
            },
            "example": "Active"
          },
          {
            "name": "startModifyDateTime",
            "in": "query",
            "description": "Last modification of the reservation is on or after the specified datetime in ISO-8601 yyyy-MM-ddTHH:mm format, local time.\r\n\r\nLimit for \"Modify\" range is 365 days.",
            "schema": {
              "type": "string",
              "example": "2024-09-09T11:11"
            },
            "example": "2024-09-09T11:11"
          },
          {
            "name": "endModifyDateTime",
            "in": "query",
            "description": "Last modification of the reservation is on or before the specified datetime in ISO-8601 yyyy-MM-ddTHH:mm format, local time.\r\n\r\nLimit for \"Modify\" range is 365 days.",
            "schema": {
              "type": "string",
              "example": "2025-09-09T11:11"
            },
            "example": "2025-09-09T11:11"
          },
          {
            "name": "startAffectPeriodDateTime",
            "in": "query",
            "description": "Stay or part of stay is after the specified datetime in ISO-8601 yyyy-MM-ddTHH:mm format, local time.\r\n\r\nLimit for \"AffectPeriod\" range is 365 days",
            "schema": {
              "type": "string",
              "example": "2024-09-09T11:11"
            },
            "example": "2024-09-09T11:11"
          },
          {
            "name": "endAffectPeriodDateTime",
            "in": "query",
            "description": "Stay or part of stay is before the specified datetime in ISO-8601 yyyy-MM-ddTHH:mm format, local time.\r\n\r\nLimit for \"AffectPeriod\" range is 365 days",
            "schema": {
              "type": "string",
              "example": "2025-09-09T11:11"
            },
            "example": "2025-09-09T11:11"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindReservationsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/find-available-rooms": {
      "get": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Searches available rooms for each stay in the reservation.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindReservationRoomsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/assign-rooms": {
      "post": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Assigns room/suite for each stay in the reservation.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PmsApi_SetRoomStayRoomRequest"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PmsApi_SetRoomStayRoomRequest"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PmsApi_SetRoomStayRoomRequest"
                }
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/check-in": {
      "post": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Assigns the actual check-in time for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckInDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-in time"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckInDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-in time"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckInDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-in time"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/check-out": {
      "post": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Assigns the actual check-out time for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckOutDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-out time"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckOutDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-out time"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetActualCheckOutDateTimeRequest"
                  }
                ],
                "description": "Request to set actual check-out time"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/find-available-payment-systems": {
      "get": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Retrieves available payment methods for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          },
          {
            "name": "action",
            "in": "query",
            "description": "Transaction type (\"Payment\" or \"Refund\")",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PmsApi_PaymentActionKind"
                }
              ],
              "example": "Payment"
            },
            "example": "Payment"
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "ISO 639-1 language code. Supported: en, ru, bg, cs, fr, id, ka, km, ko, pl, th, tr, uk, uz, vi.",
            "schema": {
              "type": "string",
              "example": "en"
            },
            "example": "en"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_GetPaymentSystemsForPaymentResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/process-payment": {
      "post": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Processes a payment for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/process-refund": {
      "post": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Processes a refund for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SavePaymentRequest"
                  }
                ],
                "description": "Request to process a payment"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/room": {
      "put": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Assigns a room for a stay.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "pmsRoomStayId",
            "in": "path",
            "description": "Room stay identifier in PMS",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "4503599628227391"
          }
        ],
        "requestBody": {
          "description": "request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetRoomRequest"
                  }
                ],
                "description": "Request to assign a room"
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetRoomRequest"
                  }
                ],
                "description": "Request to assign a room"
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PmsApi_SetRoomRequest"
                  }
                ],
                "description": "Request to assign a room"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/reservations/{number}/invoices": {
      "get": {
        "tags": [
          "PropertyReservation"
        ],
        "summary": "Retrieves all invoices related to a reservation.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Reservation number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "22200222-111-99999999"
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "ISO 639-1 language code. Supported: en, ru, bg, cs, fr, id, ka, km, ko, pl, th, tr, uk, uz, vi.",
            "schema": {
              "type": "string",
              "example": "en"
            },
            "example": "en"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindInvoicesResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v2/properties/{propertyId}/rooms": {
      "get": {
        "tags": [
          "PropertyRoom"
        ],
        "summary": "Retrieves the list of rooms/suites for a property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "roomTypeId",
            "in": "query",
            "description": "Room type identifier",
            "schema": {
              "type": "string",
              "example": "315367"
            },
            "example": "315367"
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of items to return (<=100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "example": 100
            },
            "example": 100
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Pagination token for next page. \r\n\r\nToken is in the response if the number of items exceeds the limit. \r\n\r\nSend it back to get the next set of items. \r\n\r\nIf the request contains the token, other parameters passed in the query are ignored.",
            "schema": {
              "type": "string",
              "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
            },
            "example": "V2Ugd2lzaCB5b3UgcHJvZHVjdGl2ZSBpbnRlcmFjdGlvbiE="
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsApi_FindRoomsResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms"
        }
      ]
    },
    "/v1/properties/{propertyId}/daily-occupancy": {
      "get": {
        "tags": [
          "PropertyAnalytics"
        ],
        "summary": "Retrieves daily occupancy statistics for a property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property Identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "5431"
          },
          {
            "name": "startStayDate",
            "in": "query",
            "description": "Start date of the stay period for reported statistics (ISO-8601 format YYYY-MM-DD).\r\nLimit for date range is 31 days",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-01-01"
            },
            "example": "2026-01-01"
          },
          {
            "name": "endStayDate",
            "in": "query",
            "description": "End date of the stay period for reported statistics. (ISO-8601 format YYYY-MM-DD).\r\nLimit for date range is 31 days",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-01-25"
            },
            "example": "2026-01-25"
          },
          {
            "name": "otbDate",
            "in": "query",
            "description": "Optional OTB (On-the-Books) snapshot date. If specified, the historical statistics will be filtered\r\nbased solely on the booking creation date",
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2025-01-15"
            },
            "example": "2025-01-15"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsAnalyticsApi_ApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsAnalyticsApi_ApiResponse"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsAnalyticsApi_GetDailyOccupancyResponse"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms-analytics"
        }
      ]
    },
    "/v1/properties/{propertyId}/bookings/{bookingId}": {
      "get": {
        "tags": [
          "Bookings"
        ],
        "summary": "Retrieves booking details. The bookingId is obtained from a pms_integration_storage:booking_changed webhook event.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2490"
          },
          {
            "name": "bookingId",
            "in": "path",
            "description": "Booking id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "606541"
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_BookingRs"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms-integration-storage"
        }
      ]
    },
    "/v1/properties/{propertyId}/inventories/search": {
      "post": {
        "tags": [
          "Inventory"
        ],
        "summary": "Returns PMS inventory filtered by room type codes and date range.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2490"
          }
        ],
        "requestBody": {
          "description": "Search filters: room type codes and date range",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PmsIntegrationApi_SearchInventoryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PmsIntegrationApi_SearchInventoryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PmsIntegrationApi_SearchInventoryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_SearchInventoryRs"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms-integration-storage"
        }
      ]
    },
    "/v1/properties/{propertyId}/inventories/blocks/{inventoryBlockId}": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "summary": "Retrieves inventory block details. The inventoryBlockId is obtained from a pms_integration_storage:inventory_block_changed webhook event.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2490"
          },
          {
            "name": "inventoryBlockId",
            "in": "path",
            "description": "Inventory block id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345"
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_InventoryBlockRs"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms-integration-storage"
        }
      ]
    },
    "/v1/properties/{propertyId}/calculate-stay-units": {
      "get": {
        "tags": [
          "Statistics"
        ],
        "summary": "Calculates the number of booked stay units (days or nights) for a given period and rate plan.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property ID",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2490"
          },
          {
            "name": "firstStayDate",
            "in": "query",
            "description": "First date of the period for calculation (inclusive) in ISO-8601 yyyy-MM-dd format, property local time",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2025-05-15"
          },
          {
            "name": "lastStayDate",
            "in": "query",
            "description": "Last date of the period for calculation (inclusive) in ISO-8601 yyyy-MM-dd format, property local time",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "example": "2025-08-15"
          },
          {
            "name": "pmsSideRatePlanCode",
            "in": "query",
            "description": "Rate plan code from PMS (**case-sensitive**). Specified rate plan is used to filter bookings for calculation",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "BAR1"
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_ErrorRs"
                }
              }
            }
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PmsIntegrationApi_BookedNightsCountRs"
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/pms-integration-storage"
        }
      ]
    },
    "/v1/properties/{propertyId}/reviews": {
      "get": {
        "tags": [
          "Reviews"
        ],
        "summary": "Returns a paginated list of hotel reviews sorted by date or rating.",
        "description": null,
        "operationId": "Reviews_GetReviews",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property id",
            "required": true,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageToken",
            "in": "query",
            "description": "Opaque token for pagination continuation (optional).",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "maxPageSize",
            "in": "query",
            "description": "Maximum number of reviews to return (optional, default 10, max 100).",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Sort by field: \"date\" or \"rate\" (optional, default \"date\"). Ignore if pageToken contains a non-zero value",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Sort order: \"asc\" or \"desc\" (optional, default \"desc\"). Ignore if pageToken contains a non-zero value",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code (IETF BCP-47, optional). If the review is translated into the provided language, the translation will be returned in the review body.",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "reviews": [
                    {
                      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                      "authorName": "Irina Zadirskaia",
                      "publishDate": "2025-07-30T00:00:00",
                      "rating": 9.5,
                      "originalText": "Отдыхали здесь с 14 по 23 июля 2025 года...",
                      "languageCode": "ru",
                      "sourceId": "16",
                      "replyText": "Ирина, приветствуем Вас! Благодарим Вас за выбор нашего отеля...",
                      "translatedText": "We had a rest here from July 14 to July 23, 2025..."
                    }
                  ],
                  "nextPageToken": "eyJwYWdlIjoyfQ==",
                  "hasNextPage": true
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "reviews": {
                      "type": "array"
                    },
                    "nextPageToken": {
                      "type": "string"
                    },
                    "hasNextPage": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reputation-public-reviews"
        }
      ]
    },
    "/v1/properties/{propertyId}/reviews/stats": {
      "get": {
        "tags": [
          "Reviews"
        ],
        "summary": "Returns stats rating and total reviews count for the hotel.",
        "description": null,
        "operationId": "Reviews_GetReviewStats",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "description": "Property id",
            "required": true,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "averageRating": 9.2,
                  "reviewsCount": 3985
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "averageRating": {
                      "type": "number"
                    },
                    "reviewsCount": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reputation-public-reviews"
        }
      ]
    },
    "/v1/sources": {
      "get": {
        "tags": [
          "Reviews"
        ],
        "summary": "Returns the list of review sources.",
        "description": null,
        "operationId": "Reviews_GetSources",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "sources": [
                    {
                      "id": "16",
                      "code": "Yandex"
                    },
                    {
                      "id": "12",
                      "code": "Google"
                    }
                  ]
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "sources": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reputation-public-reviews"
        }
      ]
    },
    "/v1/rating-scales": {
      "get": {
        "tags": [
          "Reviews"
        ],
        "summary": "Reference list of available rating categories and their score boundaries (e.g. excellent, good, poor).\r\nCategory rating in (MinScore; MaxScore], except for the lowest rating, which can be 0.",
        "description": null,
        "operationId": "Reviews_GetRatingScaleReference",
        "parameters": [
          {
            "name": "Authorization",
            "in": "header",
            "description": "Bearer token",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "ratingScale": [
                    {
                      "code": "poor",
                      "minScore": 0,
                      "maxScore": 2
                    },
                    {
                      "code": "not_bad",
                      "minScore": 2,
                      "maxScore": 4
                    },
                    {
                      "code": "good",
                      "minScore": 4,
                      "maxScore": 6
                    },
                    {
                      "code": "very_good",
                      "minScore": 6,
                      "maxScore": 8
                    },
                    {
                      "code": "excellent",
                      "minScore": 8,
                      "maxScore": 10
                    }
                  ]
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "ratingScale": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      },
      "servers": [
        {
          "url": "https://partner.tlintegration.com/api/reputation-public-reviews"
        }
      ]
    }
  },
  "components": {
    "schemas": {
      "ContentApi_Address": {
        "required": [
          "countryCode"
        ],
        "type": "object",
        "properties": {
          "postalCode": {
            "type": "string",
            "description": "Postcode",
            "nullable": true,
            "example": "SW1A 1AA"
          },
          "countryCode": {
            "minLength": 1,
            "type": "string",
            "description": "Country code.\r\n\r\nCompliant with ISO 3166-1 Alpha3",
            "example": "GBR"
          },
          "region": {
            "type": "string",
            "description": "Region",
            "nullable": true,
            "example": "London"
          },
          "regionId": {
            "type": "string",
            "description": "Region ID",
            "nullable": true,
            "example": "020"
          },
          "cityName": {
            "type": "string",
            "description": "City name",
            "nullable": true,
            "example": "London"
          },
          "cityId": {
            "type": "string",
            "description": "City ID",
            "nullable": true,
            "example": "1"
          },
          "addressLine": {
            "type": "string",
            "description": "Property address including street and house number",
            "nullable": true,
            "example": "123 Main St."
          },
          "latitude": {
            "type": "number",
            "description": "Geographical latitude",
            "format": "double",
            "nullable": true,
            "example": 51.5074
          },
          "longitude": {
            "type": "number",
            "description": "Geographical longitude",
            "format": "double",
            "nullable": true,
            "example": -0.1278
          },
          "remark": {
            "type": "string",
            "description": "(Planned) Further information on how to get there",
            "nullable": true,
            "example": "Take the second left after the bridge"
          }
        },
        "additionalProperties": false,
        "description": "Property address"
      },
      "ContentApi_Amenity": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity code",
            "example": "wifi_internet"
          }
        },
        "additionalProperties": false,
        "description": "Room amenities"
      },
      "ContentApi_AmenityChargeType": {
        "enum": [
          "None",
          "Free",
          "Chargeable"
        ],
        "type": "string",
        "description": "Amenity charge type:\r\n\r\nNone - Charge type is not applicable or not specified\r\n\r\nFree - Amenity is free\r\n\r\nChargeable - Chargeable amenity\r\n"
      },
      "ContentApi_AmenityInfo": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity code",
            "example": "wifi_internet"
          },
          "name": {
            "type": "string",
            "description": "Amenity name",
            "nullable": true,
            "example": "Wi-Fi-internet"
          }
        },
        "additionalProperties": false,
        "description": "Room amenities"
      },
      "ContentApi_ArrivalDatesInfo": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "description": "Start date of the rule according to local hotel time.\r\nThe format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2026-08-25"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the rule according to local hotel time.\r\nThe format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2026-08-25"
          },
          "isEndless": {
            "type": "boolean",
            "description": "Indicates that the rule is continuously active starting from StartDate",
            "example": true
          }
        },
        "additionalProperties": false
      },
      "ContentApi_BeforeArrivalMatching": {
        "enum": [
          "NoMatter",
          "AtLeast",
          "NoMoreThan",
          "Between"
        ],
        "type": "string",
        "description": "Range before arrival:\r\n\r\nNoMatter - Not dependent on any specific time;\r\n\r\nAtLeast - More than or equal to beforeArrivalValue;\r\n\r\nNoMoreThan - Less than or equal to beforeArrivalValue;\r\n\r\nBetween - Within the period from beforeArrivalValue to beforeArrivalValueMax."
      },
      "ContentApi_CancellationRule": {
        "required": [
          "id",
          "propertyId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Cancellation rule Id",
            "example": "232241"
          },
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID.",
            "example": "1024"
          },
          "referencePointKind": {
            "$ref": "#/components/schemas/ContentApi_ReferencePointKind"
          },
          "referencePointTime": {
            "type": "string",
            "description": "Time when the rule becomes active\r\nTime format complies with ISO-8601 hh:mm",
            "nullable": true,
            "example": "15:00"
          },
          "cancellationTerms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_CancellationTerm"
            },
            "description": "Cancellation terms",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContentApi_CancellationRulesResponse": {
        "type": "object",
        "properties": {
          "cancellationRules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_CancellationRule"
            },
            "description": "Cancellation rules used by any rate plan.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Cancellation rules for a given property."
      },
      "ContentApi_CancellationTerm": {
        "type": "object",
        "properties": {
          "beforeArrivalMatching": {
            "$ref": "#/components/schemas/ContentApi_BeforeArrivalMatching"
          },
          "beforeArrivalUnit": {
            "$ref": "#/components/schemas/ContentApi_TimeUnit"
          },
          "beforeArrivalValue": {
            "type": "integer",
            "description": "Number of BeforeArrivalUnits before arrival",
            "format": "int32",
            "example": 24
          },
          "beforeArrivalValueMax": {
            "type": "integer",
            "description": "Upper limit of BeforeArrivalUnit before arrival (used only with BeforeArrivalMatching.Between)",
            "format": "int32"
          },
          "penaltyCalculationMethod": {
            "$ref": "#/components/schemas/ContentApi_PenaltyCalculationMethod"
          },
          "penaltyValue": {
            "type": "number",
            "description": "Penalty value",
            "format": "double",
            "example": 0
          },
          "penaltyValueCurrency": {
            "type": "string",
            "description": "Penalty currency",
            "nullable": true,
            "example": "RUB"
          },
          "arrivalDates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ArrivalDatesInfo"
            },
            "description": "Date range when the rule is active",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContentApi_CompanyDetails": {
        "type": "object",
        "properties": {
          "legalEntityName": {
            "type": "string",
            "description": "Name of the legal entity or individual entrepreneur",
            "nullable": true,
            "example": "Google LLC"
          },
          "taxpayerIdentificationNumber": {
            "type": "string",
            "description": "Taxpayer Identification Number (TIN) of the property owner",
            "nullable": true,
            "example": "770493581"
          },
          "companyRegistrationNumber": {
            "type": "string",
            "description": "Company Registration Number (CRN)",
            "nullable": true,
            "example": "1027700132195"
          },
          "legalAddress": {
            "type": "string",
            "description": "Company Legal address",
            "nullable": true,
            "example": "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA"
          }
        },
        "additionalProperties": false,
        "description": "Basic information about the company, such as the name of the organization and Taxpayer Identification Number."
      },
      "ContentApi_ContactInfo": {
        "required": [
          "address"
        ],
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/ContentApi_Address"
          },
          "phones": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Phone"
            },
            "description": "(Planned) Property phone numbers",
            "nullable": true
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "(Planned) Hotel email addresses",
            "nullable": true,
            "example": [
              "email@example.com"
            ]
          }
        },
        "additionalProperties": false,
        "description": "Contact details entity of a property"
      },
      "ContentApi_EntityState": {
        "enum": [
          "Active",
          "Inactive"
        ],
        "type": "string",
        "description": "EntityState:\r\n\r\nInactive - entity is unavailable\r\n\r\nActive - entity is available",
        "example": "Active"
      },
      "ContentApi_ExtraServiceSurchargeOption": {
        "enum": [
          "None",
          "All",
          "MealOnly"
        ],
        "type": "string",
        "description": "Extra services for which a surcharge applies in case of early check-in or late check-out:\r\n\r\nNone - No surcharge for extra services;\r\n\r\nAll - All extra services are provided for a surcharge;\r\n\r\nMealOnly - Only breakfast is provided for a surcharge in case of early check-in. Everything else requires no surcharge."
      },
      "ContentApi_ExtraStayChargeRate": {
        "required": [
          "currency",
          "rate"
        ],
        "type": "object",
        "properties": {
          "currency": {
            "minLength": 1,
            "type": "string",
            "description": "Charge rate currency."
          },
          "rate": {
            "type": "number",
            "description": "Charge rate amount.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Charge rate for early check-in and late check-out rules."
      },
      "ContentApi_ExtraStayChargeType": {
        "enum": [
          "Free",
          "Fixed",
          "Percent",
          "HourlyRate",
          "HourlyRateAutoCalculated",
          "Forbidden"
        ],
        "type": "string",
        "description": "Charge type for early check-in and late check-out rules:\r\n\r\nFree - free of charge;\r\n\r\nFixed - fixed rate;\r\n\r\nPercent - percentage of the daily rate;\r\n\r\nHourlyRate - hourly fixed rate;\r\n\r\nHourlyRateAutoCalculated - hourly auto-calculated price;\r\n\r\nForbidden - no early check-in/late check-out."
      },
      "ContentApi_ExtraStayPercentOptions": {
        "required": [
          "extraPlacementEnabled",
          "extraServiceOption",
          "percentage"
        ],
        "type": "object",
        "properties": {
          "percentage": {
            "type": "number",
            "description": "Percentage of the daily rate charged for early check-in or late check-out.",
            "format": "double"
          },
          "extraPlacementEnabled": {
            "type": "boolean",
            "description": "'true' if there is a surcharge for an extra guest; 'false' otherwise."
          },
          "extraServiceOption": {
            "$ref": "#/components/schemas/ContentApi_ExtraServiceSurchargeOption"
          }
        },
        "additionalProperties": false,
        "description": "Early check-in and late check-out rule options for the Percent charge type."
      },
      "ContentApi_ExtraStayRule": {
        "required": [
          "checkInTime",
          "checkOutTime",
          "earlyCheckInPeriods",
          "id",
          "lateCheckOutPeriods",
          "overridesPropertyCheckInTime",
          "overridesPropertyCheckOutTime",
          "propertyId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "An identifier used to reference this rule in rate plans."
          },
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID.",
            "example": "1024"
          },
          "checkInTime": {
            "type": "string",
            "description": "Check-in time for this rule.",
            "format": "time",
            "example": "13:00"
          },
          "overridesPropertyCheckInTime": {
            "type": "boolean",
            "description": "'true' if CheckInTime overrides the property's default check-in time.\r\n'false' if CheckInTime returns the default check-in time."
          },
          "earlyCheckInPeriods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ExtraStayRulePeriod"
            },
            "description": "Early check-in rules for each time period before CheckInTime."
          },
          "checkOutTime": {
            "type": "string",
            "description": "Check-out time for this rule.",
            "format": "time",
            "example": "10:00"
          },
          "overridesPropertyCheckOutTime": {
            "type": "boolean",
            "description": "'true' if CheckOutTime overrides the property's default check-out time.\r\n'false' if CheckOutTime returns the default check-out time."
          },
          "lateCheckOutPeriods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ExtraStayRulePeriod"
            },
            "description": "Late check-out rules for each time period after CheckOutTime."
          }
        },
        "additionalProperties": false,
        "description": "Early check-in and late check-out rule."
      },
      "ContentApi_ExtraStayRulePeriod": {
        "required": [
          "chargeType",
          "endTime",
          "rates",
          "startTime"
        ],
        "type": "object",
        "properties": {
          "startTime": {
            "type": "string",
            "description": "The start time of this period.\r\nThe time interval includes the start time.\r\nThe first period starts at 00:00.",
            "format": "time",
            "example": "09:00"
          },
          "endTime": {
            "type": "string",
            "description": "The end time of this period.\r\nThe time interval excludes the end time.\r\nThe last period ends at 24:00.",
            "format": "time",
            "example": "13:00"
          },
          "chargeType": {
            "$ref": "#/components/schemas/ContentApi_ExtraStayChargeType"
          },
          "rates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ExtraStayChargeRate"
            },
            "description": "Charge rates for Fixed and HourlyRate charge types."
          },
          "percentOptions": {
            "$ref": "#/components/schemas/ContentApi_ExtraStayPercentOptions"
          },
          "occupyQuota": {
            "type": "boolean",
            "description": "Indicates whether the quota is guaranteed to be occupied.\r\nIf set to true, the quota is guaranteed to be available.\r\nIf set to false, room availability is not guaranteed, even if the extra stay has been prepaid.",
            "example": false
          }
        },
        "additionalProperties": false,
        "description": "Early check-in or late check-out rule for a time period before CheckInTime or after CheckOutTime."
      },
      "ContentApi_ExtraStayRulesResponse": {
        "required": [
          "extraStayRules"
        ],
        "type": "object",
        "properties": {
          "extraStayRules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ExtraStayRule"
            },
            "description": "Early check-in and late check-out rules used by any rate plan."
          }
        },
        "additionalProperties": false,
        "description": "Early check-in and late check-out rules for a given property."
      },
      "ContentApi_FsaCertification": {
        "required": [
          "index"
        ],
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Link to FSA certification",
            "format": "int32",
            "example": "1"
          },
          "fsaResortId": {
            "type": "string",
            "description": "ResortId in FSA",
            "nullable": true,
            "example": "f88355a3-6977-4011-a09c-784f2b837644"
          },
          "fsaRegisterRecord": {
            "type": "string",
            "description": "RegisterRecord in FSA",
            "nullable": true,
            "example": "С162021009062"
          },
          "fsaUrl": {
            "type": "string",
            "description": "Direct link to the FSA hotel certification page",
            "nullable": true,
            "example": "https://tourism.fsa.gov.ru/ru/resorts/hotels/f88355a3-6977-4011-a09c-784f2b837644/about-resort"
          },
          "fsaCertificationStatus": {
            "$ref": "#/components/schemas/ContentApi_FsaCertificationStatus"
          },
          "fsaHotelType": {
            "$ref": "#/components/schemas/ContentApi_FsaHotelType"
          },
          "certificationState": {
            "$ref": "#/components/schemas/ContentApi_FsaCertificationState"
          }
        },
        "additionalProperties": false,
        "description": "FSA certification object"
      },
      "ContentApi_FsaCertificationState": {
        "enum": [
          "Available",
          "Unavailable",
          "TemporaryOptional"
        ],
        "type": "string",
        "description": "Aggregated state of certification status:\r\nAvailable - property certification available;\r\n\r\nUnavailable - property certification not available\r\n\r\nTemporaryOptional - property certification temporary not required\r\n"
      },
      "ContentApi_FsaCertificationStatus": {
        "type": "object",
        "properties": {
          "fsaStatusId": {
            "type": "integer",
            "description": "FSA certification status id",
            "format": "int32",
            "example": 6
          },
          "name": {
            "type": "string",
            "description": "FSA certification name",
            "nullable": true,
            "example": "Действует"
          },
          "endDate": {
            "type": "string",
            "description": "FSA certification expire date",
            "nullable": true,
            "example": "2028-08-15"
          }
        },
        "additionalProperties": false,
        "description": "FSA certification status object"
      },
      "ContentApi_FsaHotelType": {
        "type": "object",
        "properties": {
          "fsaHotelTypeId": {
            "type": "integer",
            "format": "int32",
            "example": 100
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "Гостиница"
          }
        },
        "additionalProperties": false,
        "description": "FSA hotel type status object"
      },
      "ContentApi_MealPlan": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Meal plan code",
            "nullable": true,
            "example": "AllInclusive"
          },
          "name": {
            "type": "string",
            "description": "Meal plan name",
            "nullable": true,
            "example": "All inclusive"
          }
        },
        "additionalProperties": false,
        "description": "Meal plan description"
      },
      "ContentApi_OccupancyInfo": {
        "type": "object",
        "properties": {
          "adultBed": {
            "type": "integer",
            "description": "Guests with main occupancy",
            "format": "int32"
          },
          "extraBed": {
            "type": "integer",
            "description": "Extra beds in the room",
            "format": "int32"
          },
          "childWithoutBed": {
            "type": "integer",
            "description": "Child accommodation without bed",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Contain information about occupancy"
      },
      "ContentApi_PenaltyCalculationMethod": {
        "enum": [
          "PrepaymentPercent",
          "FirstNights",
          "NoPenalty",
          "FirstNightPercent",
          "Percent",
          "Fixed"
        ],
        "type": "string",
        "description": "Penalty calculation mode:\r\n\r\nNoPenalty - No penalty is applied.\r\n\r\nFirstNightPercent - The penalty is equal to a specified percentage of the cost of the first night.\r\n\r\nPrepaymentPercent - The penalty is equal to a specified percentage of the prepayment amount.\r\n\r\nFirstNights - The penalty is equal to the total cost of the first N nights.\r\n\r\nPercent - The penalty is equal to the specified percentage of the cost of the reservation (not currently used).\r\n\r\nFixed - The penalty is equal to a fixed amount (not currently used)."
      },
      "ContentApi_Phone": {
        "type": "object",
        "properties": {
          "phoneNumber": {
            "type": "string",
            "description": "Phone number",
            "nullable": true,
            "example": "+44 20 1234 5678"
          },
          "remark": {
            "type": "string",
            "description": "Comments to the phone number",
            "nullable": true,
            "example": "Voice Assistant"
          }
        },
        "additionalProperties": false,
        "description": "Property contact number"
      },
      "ContentApi_Placement": {
        "required": [
          "count",
          "kind"
        ],
        "type": "object",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/ContentApi_PlacementKind"
          },
          "count": {
            "type": "integer",
            "description": "Number of accommodations",
            "format": "int32",
            "example": 2
          },
          "minAge": {
            "type": "integer",
            "description": "Minimum age in the age group\r\n\r\nSpecified for child accommodation only\r\n(Kind = Child | ExtraChild | ChildBandWithoutBed)",
            "format": "int32",
            "nullable": true
          },
          "maxAge": {
            "type": "integer",
            "description": "Maximum age in the age group\r\n\r\nSpecified for child accommodation only\r\n\r\n(Kind = Child | ExtraChild | ChildBandWithoutBed)",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Accommodation in a room"
      },
      "ContentApi_PlacementKind": {
        "enum": [
          "Adult",
          "ExtraAdult",
          "Child",
          "ExtraChild",
          "ChildBandWithoutBed"
        ],
        "type": "string",
        "description": "Types of accommodations:\r\n\r\nAdult - adult with main occupancy\r\n\r\nExtraAdult - adult on extra bed\r\n\r\nChild - child with main occupancy\r\n\r\nExtraChild - child on extra bed\r\n\r\nChildBandWithoutBed - child without bed"
      },
      "ContentApi_PolicyInfo": {
        "required": [
          "checkInTime",
          "checkOutTime"
        ],
        "type": "object",
        "properties": {
          "checkInTime": {
            "minLength": 1,
            "type": "string",
            "description": "Local check-in time at the property.\r\n\r\nTome format complies with ISO-8601 hh:mm",
            "example": "14:00"
          },
          "checkOutTime": {
            "minLength": 1,
            "type": "string",
            "description": "Local check-out time at the property.\r\n\r\nTome format complies with ISO-8601 hh:mm",
            "example": "12:00"
          }
        },
        "additionalProperties": false,
        "description": "Standard check-in and check-out time"
      },
      "ContentApi_PropertyAmenity": {
        "required": [
          "chargeType",
          "code",
          "displayName"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity code",
            "example": "parking"
          },
          "displayName": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity display name",
            "example": "Paid parking"
          },
          "chargeType": {
            "$ref": "#/components/schemas/ContentApi_AmenityChargeType"
          }
        },
        "additionalProperties": false
      },
      "ContentApi_PropertyInfoPage": {
        "required": [
          "properties"
        ],
        "type": "object",
        "properties": {
          "next": {
            "type": "string",
            "description": "Key, to continue viewing the list.\r\n\r\n‘null’, if the current page is the last page",
            "nullable": true
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_PropertyInfoTypeWithInclude"
            },
            "description": "List of accommodation properties"
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Warning"
            },
            "description": "Warnings",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "List of accommodation properties with details\r\n\r\nThe list is split into pages"
      },
      "ContentApi_PropertyInfoType": {
        "required": [
          "amenities",
          "contactInfo",
          "id",
          "multiLocationProperty",
          "name",
          "policy",
          "ratePlans",
          "roomTypes",
          "services",
          "timeZone"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID",
            "example": "1024"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Property name",
            "example": "Test hotel"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of the property",
            "nullable": true,
            "example": "Hotel is located in a picturesque location. \n\nThere are 11 hotel rooms of \"Standard\" and \"Standard +\" categories, as well as 4 separate cottages of the \"Duplex\" type for accommodation of guests on the territory of the club."
          },
          "currency": {
            "type": "string",
            "description": "Property currency",
            "nullable": true,
            "example": "GBP"
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Resource"
            },
            "description": "Property photo gallery",
            "nullable": true
          },
          "stars": {
            "type": "integer",
            "description": "Star rating of the property",
            "format": "int32",
            "nullable": true,
            "example": 4
          },
          "stayUnitKind": {
            "$ref": "#/components/schemas/ContentApi_StayUnitKind"
          },
          "propertyKindId": {
            "type": "integer",
            "description": "Property kind identifier",
            "format": "int32",
            "example": 1
          },
          "contactInfo": {
            "$ref": "#/components/schemas/ContentApi_ContactInfo"
          },
          "policy": {
            "$ref": "#/components/schemas/ContentApi_PolicyInfo"
          },
          "timeZone": {
            "$ref": "#/components/schemas/ContentApi_TimeZoneInfo"
          },
          "ratePlans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_RatePlanInfo"
            },
            "description": "property rate plans"
          },
          "roomTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_RoomTypeInfo"
            },
            "description": "Room types of the property"
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ServiceInfo"
            },
            "description": "List of services provided by the property"
          },
          "multiLocationProperty": {
            "type": "boolean",
            "description": "The property types are apartments or flats, which may be located at different addresses"
          },
          "companyDetails": {
            "$ref": "#/components/schemas/ContentApi_CompanyDetails"
          },
          "fsaCertifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_FsaCertification"
            },
            "description": "FSA certifications collection",
            "nullable": true
          },
          "amenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_PropertyAmenity"
            },
            "description": "Amenities provided by the property"
          }
        },
        "additionalProperties": false,
        "description": "Property detailed description"
      },
      "ContentApi_PropertyInfoTypeWithInclude": {
        "required": [
          "amenities",
          "id",
          "propertyKindId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID",
            "example": "1024"
          },
          "name": {
            "type": "string",
            "description": "Property name",
            "nullable": true,
            "example": "Test hotel"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of the property",
            "nullable": true,
            "example": "Hotel is located in a picturesque location. \n\nThere are 11 hotel rooms of \"Standard\" and \"Standard +\" categories, as well as 4 separate cottages of the \"Duplex\" type for accommodation of guests on the territory of the club."
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Resource"
            },
            "description": "Property photo gallery",
            "nullable": true
          },
          "stars": {
            "type": "integer",
            "description": "Star rating of the property",
            "format": "int32",
            "nullable": true,
            "example": 4
          },
          "stayUnitKind": {
            "$ref": "#/components/schemas/ContentApi_StayUnitKind"
          },
          "propertyKindId": {
            "type": "integer",
            "description": "Property kind identifier",
            "format": "int32",
            "example": 1
          },
          "contactInfo": {
            "$ref": "#/components/schemas/ContentApi_ContactInfo"
          },
          "policy": {
            "$ref": "#/components/schemas/ContentApi_PolicyInfo"
          },
          "timeZone": {
            "$ref": "#/components/schemas/ContentApi_TimeZoneInfo"
          },
          "ratePlans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_RatePlanInfo"
            },
            "description": "Property rate plans",
            "nullable": true
          },
          "roomTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_RoomTypeInfo"
            },
            "description": "Room types of the property",
            "nullable": true
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_ServiceInfo"
            },
            "description": "List of services provided by the property",
            "nullable": true
          },
          "multiLocationProperty": {
            "type": "boolean",
            "description": "The property types are apartments or flats, which may be located at different addresses",
            "nullable": true
          },
          "companyDetails": {
            "$ref": "#/components/schemas/ContentApi_CompanyDetails"
          },
          "currency": {
            "type": "string",
            "description": "Property currency",
            "nullable": true,
            "example": "GBP"
          },
          "fsaCertifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_FsaCertification"
            },
            "description": "FSA certifications collection",
            "nullable": true
          },
          "amenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_PropertyAmenity"
            },
            "description": "Amenities provided by the property"
          }
        },
        "additionalProperties": false,
        "description": "Information on the accommodation property\r\n\r\nThe Id field is always filled in, other fields - in case of parameter ‘include=all’"
      },
      "ContentApi_RatePlanInfo": {
        "required": [
          "cancellationRuleId",
          "corporateOnly",
          "currency",
          "id",
          "isStayWithChildrenOnly",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan ID",
            "example": "133528"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan name",
            "example": "Main rate plan"
          },
          "description": {
            "type": "string",
            "description": "Rate plan description, may contain HTML tags",
            "nullable": true,
            "example": "<p>Book your accommodation at the best price!</p>\n<p>The accommodation price includes: </p>\n<p>- Free secure parking on site</p>\n<p>- High-speed wireless Internet</p>\n<p>- Playground on site</p>"
          },
          "currency": {
            "minLength": 1,
            "type": "string",
            "description": "(Planned) Rate plan currency",
            "example": "GBP"
          },
          "isStayWithChildrenOnly": {
            "type": "boolean",
            "description": "Stay available with children only",
            "example": false
          },
          "cancellationRuleId": {
            "minLength": 1,
            "type": "string",
            "description": "Cancellation rule ID",
            "example": "56454"
          },
          "extraStayRuleId": {
            "type": "string",
            "description": "Early check-in and late check-out rule ID.\r\n\r\nNull if rate plan does not allow additional accommodation.",
            "nullable": true,
            "example": "202584"
          },
          "vat": {
            "$ref": "#/components/schemas/ContentApi_Vat"
          },
          "availableServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Service"
            },
            "description": "Extra services included in the rate plan",
            "nullable": true
          },
          "corporateOnly": {
            "type": "boolean",
            "description": "Rate plan is available only for corporate clients",
            "example": false
          }
        },
        "additionalProperties": false,
        "description": "The rate plan of the accommodation property"
      },
      "ContentApi_ReferencePointKind": {
        "enum": [
          "ProviderArrivalTime",
          "ProviderDepartureTime",
          "GuestArrivalTime",
          "CustomArrivalTime",
          "BookingCreationTime"
        ],
        "type": "string",
        "description": "Time reference point for the rule:\r\n\r\nProviderArrivalTime - \"Hotel check-in time.\"\r\n\r\nProviderDepartureTime - \"Hotel check-out time\" - The countdown starts from the check-out time on the day of arrival.\r\n\r\nGuestArrivalTime - \"Guest-specified check-in time\" - The countdown starts from the check-in time specified by the guest.\r\n\r\nCustomArrivalTime - \"Specified time\" - The countdown starts from the time specified in the cancellation rule.\r\n\r\nBookingCreationTime - \"Booking time\" - The countdown starts from the time the guest made the booking."
      },
      "ContentApi_Resource": {
        "required": [
          "url"
        ],
        "type": "object",
        "properties": {
          "url": {
            "minLength": 1,
            "type": "string",
            "description": "Resource link"
          }
        },
        "additionalProperties": false,
        "description": "Resource information"
      },
      "ContentApi_RoomAmenitiesCategories": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Category name",
            "example": "Internet/telephony"
          },
          "amenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_AmenityInfo"
            },
            "description": "Amenities included in the category",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Room amenities category"
      },
      "ContentApi_RoomTypeAvailability": {
        "enum": [
          "All",
          "Selective"
        ],
        "type": "string",
        "description": "Type of service availability:\r\n\r\nAll - service is available for all room types\r\n\r\nSelective - service is available to specific room types"
      },
      "ContentApi_RoomTypeCategory": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Code",
            "nullable": true,
            "example": "PlaceInRoom"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true,
            "example": "place in the room"
          }
        },
        "additionalProperties": false,
        "description": "Room type entity"
      },
      "ContentApi_RoomTypeFsaCertification": {
        "required": [
          "index"
        ],
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Link to FSA certification",
            "format": "int32",
            "example": 1
          }
        },
        "additionalProperties": false,
        "description": "Room type FSA certification"
      },
      "ContentApi_RoomTypeInfo": {
        "required": [
          "categoryCode",
          "categoryName",
          "id",
          "name",
          "placements"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Room type ID",
            "example": "82751"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name",
            "example": "Standard"
          },
          "description": {
            "type": "string",
            "description": "Detailed description",
            "nullable": true,
            "example": "Each room (25 m2) style combines elegant classics with modern decorative elements and a high level of comfort. Standard rooms can accommodate 2 people on two twin one-and-a-half beds (120*200). A third guest can be accommodated on an extra folding bed. Cots are provided for small children. Among amenities of each room: - High-speed WiFi, LCD TV with a wide choice of cable channels and the option to watch movies online - Spacious bathrooms with walk-in and rain shower; - Cosmetics and toiletries, bathrobes and slippers - High quality bed linen - Balcony with comfortable furniture, views of the Gulf of Finland and the islands."
          },
          "amenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Amenity"
            },
            "description": "Room amenities",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Resource"
            },
            "description": "Room images",
            "nullable": true
          },
          "size": {
            "$ref": "#/components/schemas/ContentApi_RoomTypeSquare"
          },
          "categoryCode": {
            "minLength": 1,
            "type": "string",
            "description": "Category code",
            "example": "PlaceInRoom"
          },
          "categoryName": {
            "minLength": 1,
            "type": "string",
            "description": "Category name",
            "example": "Place in the room"
          },
          "address": {
            "$ref": "#/components/schemas/ContentApi_Address"
          },
          "occupancy": {
            "$ref": "#/components/schemas/ContentApi_OccupancyInfo"
          },
          "placements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Placement"
            },
            "description": "Accommodations entity"
          },
          "position": {
            "type": "integer",
            "description": "Order in output",
            "format": "int32",
            "nullable": true,
            "example": 100
          },
          "fsaCertification": {
            "$ref": "#/components/schemas/ContentApi_RoomTypeFsaCertification"
          }
        },
        "additionalProperties": false,
        "description": "Room type info"
      },
      "ContentApi_RoomTypeSquare": {
        "required": [
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "integer",
            "description": "Area, value in square meters",
            "format": "int32",
            "example": 25
          }
        },
        "additionalProperties": false,
        "description": "Room area"
      },
      "ContentApi_Service": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Service ID",
            "format": "int32"
          },
          "included": {
            "type": "boolean",
            "description": "This parameter shows if the extra service is included in the rate plan"
          },
          "roomTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Collection of room types IDs for which the service is available in the rate plan\r\n",
            "nullable": true
          },
          "roomTypeAvailability": {
            "$ref": "#/components/schemas/ContentApi_RoomTypeAvailability"
          }
        },
        "additionalProperties": false,
        "description": "Details of the rate plan service"
      },
      "ContentApi_ServiceInfo": {
        "required": [
          "id",
          "kind",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Service ID",
            "example": "42807"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Service name",
            "example": "Christmas tree"
          },
          "description": {
            "type": "string",
            "description": "Service description",
            "nullable": true,
            "example": "Children's New Year party"
          },
          "kind": {
            "$ref": "#/components/schemas/ContentApi_ServiceKind"
          },
          "mealPlanCode": {
            "type": "string",
            "description": "Meal plan code. Specified in case the service type is ‘Meal’ (Kind = Meal)",
            "nullable": true
          },
          "mealPlanName": {
            "type": "string",
            "description": "Meal plan name. Specified in case the service type is ‘Meal’ (Kind = Meal)",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentApi_Resource"
            },
            "description": "Array of images of the service provided",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ContentApi_EntityState"
          },
          "vat": {
            "$ref": "#/components/schemas/ContentApi_Vat"
          }
        },
        "additionalProperties": false,
        "description": "Description of the service provided by the property\r\n\r\nIf ‘kind’=Meal, the meal plan code is specified in mealPlanCode field, otherwise mealPlanCode=null"
      },
      "ContentApi_ServiceKind": {
        "enum": [
          "Common",
          "Meal"
        ],
        "type": "string",
        "description": "Service type:\r\n\r\nCommon - common service\r\n\r\nMeal - meal service",
        "example": "Common"
      },
      "ContentApi_StayUnitKind": {
        "enum": [
          "NightRate",
          "DailyRate"
        ],
        "type": "string",
        "description": "Type of accommodation unit ‘nights’ or ‘days’"
      },
      "ContentApi_TimeUnit": {
        "enum": [
          "None",
          "Day",
          "Hour"
        ],
        "type": "string",
        "description": "Timeframes when a penalty can be set.\r\nNone used only with BeforeArrivalMatching.NoMatter."
      },
      "ContentApi_TimeZoneInfo": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Time zone ID.\r\n\r\ncorresponds to IANA Time Zones ID",
            "example": "Europe/London"
          }
        },
        "additionalProperties": false,
        "description": "Property time zone"
      },
      "ContentApi_Vat": {
        "required": [
          "applicable"
        ],
        "type": "object",
        "properties": {
          "applicable": {
            "type": "boolean",
            "description": "Is VAT payable\r\n\r\nIf false - VAT is not payable, so Included and Percent are not specified",
            "example": true
          },
          "included": {
            "type": "boolean",
            "description": "Is VAT included in TotalPrice",
            "nullable": true,
            "example": true
          },
          "percent": {
            "type": "integer",
            "description": "Percentage",
            "format": "int32",
            "nullable": true,
            "example": 20
          }
        },
        "additionalProperties": false
      },
      "ContentApi_Warning": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true,
            "example": "NotEnoughRights"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "example": "Not enough rights to hotel"
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_Corporate": {
        "required": [
          "id",
          "legalName",
          "registrationReasonCode",
          "taxpayerIdentificationNumber"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier of the corporate client"
          },
          "taxpayerIdentificationNumber": {
            "minLength": 1,
            "type": "string",
            "description": "Taxpayer Identification Number (TIN)",
            "example": "770493581"
          },
          "registrationReasonCode": {
            "minLength": 1,
            "type": "string",
            "description": "Registration Reason Code (RRC)",
            "example": "771401001"
          },
          "legalName": {
            "minLength": 1,
            "type": "string",
            "description": "Name of the legal entity or individual entrepreneur",
            "example": "Google LLC"
          },
          "metaData": {
            "type": "string",
            "description": "Metadata about the corporate client",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_CorporateRq": {
        "required": [
          "registrationReasonCode",
          "taxpayerIdentificationNumber"
        ],
        "type": "object",
        "properties": {
          "taxpayerIdentificationNumber": {
            "minLength": 1,
            "type": "string",
            "description": "Taxpayer Identification Number (TIN)",
            "example": "770493581"
          },
          "registrationReasonCode": {
            "minLength": 1,
            "type": "string",
            "description": "Registration Reason Code (RRC).",
            "example": "771401001"
          },
          "metaData": {
            "type": "string",
            "description": "Metadata about the corporate client.",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Corporate client creation entity"
      },
      "ReferenceDataApi_CorporateRs": {
        "required": [
          "corporate"
        ],
        "type": "object",
        "properties": {
          "corporate": {
            "$ref": "#/components/schemas/ReferenceDataApi_Corporate"
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceDataApi_Warning"
            },
            "description": "Warnings",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PaymentMethod": {
        "required": [
          "code",
          "type"
        ],
        "type": "object",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/ReferenceDataApi_PaymentMethodCode"
          },
          "type": {
            "$ref": "#/components/schemas/ReferenceDataApi_PaymentMethodType"
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PaymentMethodCode": {
        "enum": [
          "AtArrival",
          "BankCardGuarantee",
          "BankCard",
          "SBP"
        ],
        "type": "string",
        "description": "Payment method code\n\r\n`AtArrival` - Payment for the booking at arrival at the hotel\n\r\n`BankCardGuarantee` - Card details are provided for create booking but payment is made later\n\r\n`BankCard` - Payment for the booking online via booking form\n\r\n`SBP` - Payment via fast payment system using QR code"
      },
      "ReferenceDataApi_PaymentMethodType": {
        "enum": [
          "Cash",
          "Prepay"
        ],
        "type": "string",
        "description": "Payment type\n\r\n`Cash` - Payment for the booking at arrival at the hotel\n\r\n`Prepay` - Prepayment for the booking online"
      },
      "ReferenceDataApi_PaymentMethodsResponse": {
        "type": "object",
        "properties": {
          "paymentMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceDataApi_PaymentMethod"
            },
            "description": "All available payment methods",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PropertyAmenityType": {
        "required": [
          "chargeTypeApplicable",
          "code",
          "displayName"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity type code",
            "example": "parking"
          },
          "displayName": {
            "minLength": 1,
            "type": "string",
            "description": "Amenity type name",
            "example": "Parking"
          },
          "chargeTypeApplicable": {
            "type": "boolean",
            "description": "Indicates whether the `ChargeType` setting applies to amenity type",
            "example": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PropertyAmenityTypesResponse": {
        "type": "object",
        "properties": {
          "amenityTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceDataApi_PropertyAmenityType"
            },
            "description": "All available amenity types by property",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PropertyKindDto": {
        "required": [
          "displayName",
          "id",
          "propertyKindType"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Property kind identifier",
            "format": "int32",
            "example": 2
          },
          "displayName": {
            "minLength": 1,
            "type": "string",
            "description": "Property kind display name",
            "example": "Hotel"
          },
          "propertyKindType": {
            "minLength": 1,
            "type": "string",
            "description": "Property kind type",
            "example": "Hotel"
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_PropertyKindsResponse": {
        "type": "object",
        "properties": {
          "propertyKinds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceDataApi_PropertyKindDto"
            },
            "description": "All available property kinds",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceDataApi_Warning": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code",
            "nullable": true,
            "example": "404"
          },
          "message": {
            "type": "string",
            "description": "Error message",
            "nullable": true,
            "example": "Corporate not found"
          }
        },
        "additionalProperties": false,
        "description": "Warnings"
      },
      "ReservationApi_Booking": {
        "required": [
          "cancellation",
          "createdDateTime",
          "currencyCode",
          "guaranteeInfo",
          "modifiedDateTime",
          "number",
          "propertyId",
          "roomStays",
          "source",
          "status",
          "taxes",
          "total"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID",
            "example": "7291"
          },
          "number": {
            "minLength": 1,
            "type": "string",
            "description": "Booking number",
            "example": "20240325-7291-260123396"
          },
          "status": {
            "$ref": "#/components/schemas/ReservationApi_BookingStatus"
          },
          "createdDateTime": {
            "type": "string",
            "description": "Date and time the booking was created.<br />\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm:ss and uses UTC.",
            "format": "date-time",
            "example": "2024-03-23T10:41:04Z"
          },
          "modifiedDateTime": {
            "type": "string",
            "description": "Date and time the booking was last modified.<br />\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm:ss and uses UTC.",
            "format": "date-time",
            "example": "2024-03-27T11:41:04Z"
          },
          "guaranteeInfo": {
            "$ref": "#/components/schemas/ReservationApi_GuaranteeInfo"
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Booking currency",
            "example": "RUB"
          },
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_RoomStay"
            },
            "description": "List of stays"
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_BookingService"
            },
            "description": "Extra services with the charge type ‘Per booking’ (PerReservation).",
            "nullable": true
          },
          "total": {
            "$ref": "#/components/schemas/ReservationApi_Total"
          },
          "taxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_Tax"
            },
            "description": "Taxes and fees"
          },
          "cancellation": {
            "$ref": "#/components/schemas/ReservationApi_Cancellation"
          },
          "source": {
            "$ref": "#/components/schemas/ReservationApi_POS"
          },
          "customer": {
            "$ref": "#/components/schemas/ReservationApi_Customer"
          }
        },
        "additionalProperties": false,
        "description": "Booking details"
      },
      "ReservationApi_BookingService": {
        "required": [
          "description",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Service ID",
            "example": "7898"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name",
            "example": "Fruit platter"
          },
          "description": {
            "minLength": 1,
            "type": "string",
            "description": "Description",
            "example": "Fruit platter at check-in"
          },
          "total": {
            "$ref": "#/components/schemas/ReservationApi_ServiceTotal"
          }
        },
        "additionalProperties": false,
        "description": "Extra service for a booking"
      },
      "ReservationApi_BookingStatus": {
        "enum": [
          "Active",
          "Cancelled",
          "Unconfirmed"
        ],
        "type": "string",
        "description": "Booking status:<br />\r\nActive - active booking<br />\r\nCancelled - cancelled booking<br />\r\nUnconfirmed - not confirmed booking<br />",
        "example": "Cancelled"
      },
      "ReservationApi_BookingSummary": {
        "required": [
          "number"
        ],
        "type": "object",
        "properties": {
          "number": {
            "minLength": 1,
            "type": "string",
            "description": "Booking number",
            "example": "20191001-1024-45675262"
          },
          "propertyId": {
            "type": "integer",
            "description": "Property ID",
            "format": "int32",
            "example": 1024
          },
          "status": {
            "$ref": "#/components/schemas/ReservationApi_BookingStatus"
          },
          "createdDateTime": {
            "type": "string",
            "description": "Date and time the booking was created.<br />\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm:ss and uses UTC.",
            "format": "date-time",
            "example": "2019-06-20T10:41:04Z"
          },
          "modifiedDateTime": {
            "type": "string",
            "description": "Date and time the booking was last modified.<br />\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm:ss and uses UTC.",
            "format": "date-time",
            "nullable": true,
            "example": "2019-06-20T11:41:04Z"
          }
        },
        "additionalProperties": false,
        "description": "Booking summary"
      },
      "ReservationApi_BookingsPage": {
        "required": [
          "bookingSummaries",
          "hasMoreData"
        ],
        "type": "object",
        "properties": {
          "continueToken": {
            "type": "string",
            "description": "Token used to continue receiving booking summaries",
            "nullable": true,
            "example": "Qm9va2luZ0NvbnRpbnVhdGlvblRva2Vu"
          },
          "hasMoreData": {
            "type": "boolean",
            "description": "The value shows whether there are any bookings that have not yet been received.<br />\r\ntrue - There are new bookings or their modifications. It is necessary to make another request with the new continueToken to receive them.<br />\r\nfalse - There are no new bookings or their modifications. The new continuousToken needs to be saved to receive futher bookings.",
            "example": false
          },
          "bookingSummaries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_BookingSummary"
            },
            "description": "Booking summaries received with this page"
          }
        },
        "additionalProperties": false,
        "description": "Booking summary page"
      },
      "ReservationApi_Cancellation": {
        "required": [
          "cancelledDateTime"
        ],
        "type": "object",
        "properties": {
          "penaltyAmount": {
            "type": "number",
            "description": "Penalty amount for cancellation",
            "format": "double",
            "nullable": true,
            "example": 8550
          },
          "cancelledDateTime": {
            "type": "string",
            "description": "Cancellation time in UTC. Format complies with ISO-8601 YYYY-MM-DDThh:mm:ss",
            "format": "date-time",
            "example": "2024-03-27T07:10:04Z"
          }
        },
        "additionalProperties": false,
        "description": "Information about booking cancellation (if cancelled)"
      },
      "ReservationApi_Customer": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "First name",
            "nullable": true,
            "example": "Sherlock"
          },
          "lastName": {
            "type": "string",
            "description": "Last name",
            "nullable": true,
            "example": "Holmes"
          }
        },
        "additionalProperties": false,
        "description": "BookingCustomer information"
      },
      "ReservationApi_DailyRate": {
        "required": [
          "date",
          "priceBeforeTax",
          "ratePlanId"
        ],
        "type": "object",
        "properties": {
          "ratePlanId": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan Id",
            "example": "133467"
          },
          "priceBeforeTax": {
            "type": "number",
            "description": "Price per night excluding taxes and fees",
            "format": "double",
            "example": 8550
          },
          "date": {
            "type": "string",
            "description": "Date. Date format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2024-03-27"
          }
        },
        "additionalProperties": false,
        "description": "Daily rate"
      },
      "ReservationApi_Discount": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "Discount amount",
            "format": "double",
            "example": 1185
          },
          "discountType": {
            "$ref": "#/components/schemas/ReservationApi_DiscountType"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true,
            "example": "Gold"
          },
          "percent": {
            "type": "number",
            "description": "Discount rate",
            "format": "double",
            "example": 15
          }
        },
        "additionalProperties": false,
        "description": "Discount"
      },
      "ReservationApi_DiscountType": {
        "enum": [
          "Percentage",
          "Fixed"
        ],
        "type": "string",
        "description": "Discount type: \"Percentage\" for a percentage discount and \"Fixed\" for a fixed discount.",
        "example": "Percentage"
      },
      "ReservationApi_ExtraStayCharges": {
        "type": "object",
        "properties": {
          "earlyArrival": {
            "$ref": "#/components/schemas/ReservationApi_ExtraStayDetails"
          },
          "lateDeparture": {
            "$ref": "#/components/schemas/ReservationApi_ExtraStayDetails"
          }
        },
        "additionalProperties": false,
        "description": "Surcharge details for early arrival and late departure"
      },
      "ReservationApi_ExtraStayDetails": {
        "type": "object",
        "properties": {
          "overriddenDateTime": {
            "type": "string",
            "description": "Date and property local time",
            "format": "date-time",
            "example": "2024-03-27T18:00"
          },
          "total": {
            "$ref": "#/components/schemas/ReservationApi_Total"
          }
        },
        "additionalProperties": false,
        "description": "Surcharge details for early arrival or late departure"
      },
      "ReservationApi_GetBookingResponse": {
        "required": [
          "booking"
        ],
        "type": "object",
        "properties": {
          "booking": {
            "$ref": "#/components/schemas/ReservationApi_Booking"
          }
        },
        "additionalProperties": false,
        "description": "Response with booking details"
      },
      "ReservationApi_Guarantee": {
        "required": [
          "paymentMethod"
        ],
        "type": "object",
        "properties": {
          "paymentMethod": {
            "$ref": "#/components/schemas/ReservationApi_PaymentMethod"
          }
        },
        "additionalProperties": false,
        "description": "Booking guarantee"
      },
      "ReservationApi_GuaranteeInfo": {
        "required": [
          "guarantees",
          "loyalty",
          "totalPrepaid"
        ],
        "type": "object",
        "properties": {
          "loyalty": {
            "$ref": "#/components/schemas/ReservationApi_Loyalty"
          },
          "totalPrepaid": {
            "type": "number",
            "description": "Total prepaid amount for the booking. This may also include the amount covered by bonuses.",
            "format": "double",
            "example": 1234
          },
          "guarantees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_Guarantee"
            },
            "description": "Booking guarantees"
          }
        },
        "additionalProperties": false,
        "description": "Details of the booking guarantee"
      },
      "ReservationApi_Guest": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "First name",
            "nullable": true,
            "example": "Sherlock"
          },
          "lastName": {
            "type": "string",
            "description": "Last name",
            "nullable": true,
            "example": "Holmes"
          }
        },
        "additionalProperties": false,
        "description": "Guest"
      },
      "ReservationApi_GuestCount": {
        "required": [
          "adultCount"
        ],
        "type": "object",
        "properties": {
          "adultCount": {
            "type": "integer",
            "description": "Number of adults",
            "format": "int32",
            "example": 1
          },
          "childAges": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Child age range<br />\r\nIf the child age is not specified, the value is null",
            "nullable": true,
            "example": [
              5
            ]
          }
        },
        "additionalProperties": false,
        "description": "Number of guests"
      },
      "ReservationApi_Loyalty": {
        "type": "object",
        "properties": {
          "cards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_LoyaltyCard"
            },
            "description": "Loyalty cards",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Loyalty programs details"
      },
      "ReservationApi_LoyaltyCard": {
        "type": "object",
        "properties": {
          "cardNumber": {
            "type": "string",
            "description": "Loyalty card number",
            "nullable": true,
            "example": "11039500047840"
          },
          "loyaltySystemId": {
            "type": "string",
            "description": "Loyalty program type",
            "nullable": true,
            "example": "TLStatusLevel"
          }
        },
        "additionalProperties": false,
        "description": "Information about the loyalty program"
      },
      "ReservationApi_POS": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/ReservationApi_POSType"
          },
          "code": {
            "type": "string",
            "description": "POS code",
            "nullable": true,
            "example": "OTG"
          },
          "sourceUrl": {
            "type": "string",
            "description": "The address of the source from which the reservation was made, such as the address of the reservation form.",
            "nullable": true,
            "example": "https://test-hotel.com?hotelid=7291"
          }
        },
        "additionalProperties": false,
        "description": "Point of sale through which a booking was made"
      },
      "ReservationApi_POSType": {
        "enum": [
          "Channel",
          "BookingEngine",
          "PMS",
          "Other"
        ],
        "type": "string",
        "description": "POS type<br />\r\nThe list of POS types can be expanded<br />\r\nChannel - channel or PartnerAPI or Yandex<br />\r\nBookingEngine - booking engine<br />\r\nPMS - property management system<br />\r\nOther - other POS types<br />",
        "example": "Channel"
      },
      "ReservationApi_PaymentMethod": {
        "enum": [
          "Unknown",
          "BankCard",
          "Electronic",
          "Cashless",
          "AtArrival",
          "Offline",
          "IndividualCashless",
          "AtOffice",
          "TravelAgency",
          "Deposit",
          "ExternalSystem",
          "BackOrder",
          "BankCardGuarantee",
          "CreditPayment",
          "Sbp",
          "Bonus",
          "Installment",
          "Voucher"
        ],
        "type": "string",
        "description": "Payment method:<br />\r\nUnknown - unknown payment method<br />\r\nBankCard - bank card<br />\r\nElectronic - electronic payment<br />\r\nCashless - cashless payment<br />\r\nAtArrival - payment on arrival<br />\r\nOffline - offline payment<br />\r\nIndividualCashless - payment from account<br />\r\nAtOffice - payment in office<br />\r\nTravelAgency - travel agent payment<br />\r\nDeposit - deposit payment<br />\r\nExternalSystem - external system payment<br />\r\nBackOrder - back order payment<br />\r\nBankCardGuarantee - bank card guarantee<br />\r\nCreditPayment - credit payment<br />\r\nSbp - sbp<br />\r\nBonus - bonus<br />\r\nInstallment - installment payment<br />\r\nVoucher - voucher payment",
        "example": "BankCard"
      },
      "ReservationApi_RatePlan": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan Id",
            "example": "341178"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan name",
            "example": "Best offer of the day"
          }
        },
        "additionalProperties": false,
        "description": "Rate plan"
      },
      "ReservationApi_RoomStay": {
        "required": [
          "dailyRates",
          "guestCount",
          "ratePlans",
          "roomType",
          "stayDates",
          "total"
        ],
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Room Stay Index",
            "format": "int64"
          },
          "stayDates": {
            "$ref": "#/components/schemas/ReservationApi_StayDates"
          },
          "ratePlans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_RatePlan"
            },
            "description": "List of room stay rate plans"
          },
          "roomType": {
            "$ref": "#/components/schemas/ReservationApi_RoomType"
          },
          "guestCount": {
            "$ref": "#/components/schemas/ReservationApi_GuestCount"
          },
          "guests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_Guest"
            },
            "description": "List of guests for this room stay",
            "nullable": true
          },
          "dailyRates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_DailyRate"
            },
            "description": "Price breakdown by day"
          },
          "total": {
            "$ref": "#/components/schemas/ReservationApi_Total"
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_RoomStayService"
            },
            "description": "Extra services for this stay<br />",
            "nullable": true
          },
          "extraStayCharges": {
            "$ref": "#/components/schemas/ReservationApi_ExtraStayCharges"
          }
        },
        "additionalProperties": false,
        "description": "Room accommodation details"
      },
      "ReservationApi_RoomStayService": {
        "required": [
          "description",
          "id",
          "inclusive",
          "kind",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Service ID",
            "example": "42965"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name",
            "example": "Breakfast"
          },
          "description": {
            "minLength": 1,
            "type": "string",
            "description": "Description",
            "example": "Breakfast at a restaurant at a special price"
          },
          "total": {
            "$ref": "#/components/schemas/ReservationApi_ServiceTotal"
          },
          "inclusive": {
            "type": "boolean",
            "description": "This parameter shows if the extra service is included in the rate plan.<br />\r\nIf the service is not included in the rate plan (inclusive = false), the TotalPrice is not specified",
            "example": false
          },
          "kind": {
            "$ref": "#/components/schemas/ReservationApi_ServiceKind"
          },
          "mealPlanCode": {
            "type": "string",
            "description": "Meal plan code<br />\r\nDisplayed only if the service type is ‘Meal\\’ (kind = Meal)<br />\r\nThe MealPlanCode mapping can be found in ContentApi in the meal-plans endpoint.",
            "nullable": true,
            "example": "ContinentalBreakfast"
          }
        },
        "additionalProperties": false,
        "description": "Extra service for accommodation"
      },
      "ReservationApi_RoomType": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Room type ID",
            "example": "82751"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Room type name",
            "example": "Standard"
          }
        },
        "additionalProperties": false,
        "description": "Room type"
      },
      "ReservationApi_ServiceKind": {
        "enum": [
          "Common",
          "Meal"
        ],
        "type": "string",
        "description": "Service type:<br />\r\nCommon - common service<br />\r\nMeal - meal service",
        "example": "Meal"
      },
      "ReservationApi_ServiceTotal": {
        "required": [
          "priceAfterTax",
          "priceBeforeTax",
          "taxAmount"
        ],
        "type": "object",
        "properties": {
          "priceBeforeTax": {
            "type": "number",
            "description": "Discounted price, excluding taxes and fees.",
            "format": "double",
            "example": 8550
          },
          "priceAfterTax": {
            "type": "number",
            "description": "Discounted price, including taxes and fees.",
            "format": "double",
            "example": 8650
          },
          "taxAmount": {
            "type": "number",
            "description": "Amount of taxes and fees payable at check-in",
            "format": "double",
            "example": 100
          },
          "taxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_TaxAmount"
            },
            "description": "Taxes and fees payable at check-in",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Total for service"
      },
      "ReservationApi_StayDates": {
        "required": [
          "arrivalDateTime",
          "departureDateTime"
        ],
        "type": "object",
        "properties": {
          "arrivalDateTime": {
            "type": "string",
            "description": "Check-in date and time according to local hotel time.<br />\r\nThe format complies with ISO-8601 YYYY-MM-DDThh:mm",
            "format": "date-time",
            "example": "2024-03-27T14:00"
          },
          "departureDateTime": {
            "type": "string",
            "description": "Check-out date and time according to local hotel time.<br />\r\nThe format complies with ISO-8601 YYYY-MM-DDThh:mm",
            "format": "date-time",
            "example": "2024-03-28T12:00"
          }
        },
        "additionalProperties": false,
        "description": "Period of stay"
      },
      "ReservationApi_Tax": {
        "required": [
          "index"
        ],
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Link to tax description in a booking",
            "format": "int32",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "Tax name",
            "nullable": true,
            "example": "Lodging fee"
          },
          "description": {
            "type": "string",
            "description": "Tax description",
            "nullable": true,
            "example": "Fee per guest, payable at check-in"
          }
        },
        "additionalProperties": false,
        "description": "Taxes and fees"
      },
      "ReservationApi_TaxAmount": {
        "required": [
          "amount",
          "index"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "Amount of tax or fee",
            "format": "double",
            "example": 100
          },
          "index": {
            "type": "integer",
            "description": "Link to tax description in a booking",
            "format": "int32",
            "example": 1
          }
        },
        "additionalProperties": false,
        "description": "Amount of tax or fee"
      },
      "ReservationApi_Total": {
        "required": [
          "priceAfterTax",
          "priceBeforeTax",
          "taxAmount"
        ],
        "type": "object",
        "properties": {
          "priceBeforeTax": {
            "type": "number",
            "description": "Discounted price, excluding taxes and fees.",
            "format": "double",
            "example": 8550
          },
          "priceAfterTax": {
            "type": "number",
            "description": "Discounted price, including taxes and fees.",
            "format": "double",
            "example": 8650
          },
          "taxAmount": {
            "type": "number",
            "description": "Amount of taxes and fees payable at check-in",
            "format": "double",
            "example": 100
          },
          "taxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_TaxAmount"
            },
            "description": "Taxes and fees payable at check-in",
            "nullable": true
          },
          "discounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReservationApi_Discount"
            },
            "description": "Discounts",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Total"
      },
      "SearchApi_AggregationSearchByPropertiesResponse": {
        "required": [
          "roomStays"
        ],
        "type": "object",
        "properties": {
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_ShortRoomStay"
            },
            "description": "Accommodation options with minimum prices by hotels"
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_Warning"
            },
            "description": "Warnings",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Groups of the accommodation search by accommodations;\r\nincludes accommodations with a minimum price by accommodations\r\nthat can be used when booking"
      },
      "SearchApi_AvailableDiscount": {
        "required": [
          "amount",
          "reason"
        ],
        "type": "object",
        "properties": {
          "reason": {
            "$ref": "#/components/schemas/SearchApi_DiscountReason"
          },
          "amount": {
            "type": "number",
            "description": "Discount amount",
            "format": "double",
            "example": 100
          }
        },
        "additionalProperties": false,
        "description": "Available discount information"
      },
      "SearchApi_BookingPlacementKind": {
        "enum": [
          "Adult",
          "ExtraAdult",
          "Child",
          "ExtraChild",
          "ChildBandWithoutBed"
        ],
        "type": "string",
        "description": "Types of accommodations:\r\n\r\nAdult - adult with main occupancy\r\n\r\nExtraAdult - adult on extra bed\r\n\r\nChild - child with main occupancy\r\n\r\nExtraChild - child on extra bed\r\n\r\nChildBandWithoutBed - child without bed"
      },
      "SearchApi_CalculationMethod": {
        "enum": [
          "PerStay",
          "PerPerson",
          "PerPersonByAge",
          "PerUse"
        ],
        "type": "string",
        "description": "Price calculation methods: \r\n\r\nPerStay - The extra service is charged per room stay\r\n\r\nPerPerson - The extra service is charged per guest\r\n\r\nPerPersonByAge - The extra service is charged per guest. The service price may vary depending on the age of the guests.\r\n\r\nPerUse - The extra service is charged per use of the service",
        "example": "PerPerson"
      },
      "SearchApi_CancellationPolicy": {
        "type": "object",
        "properties": {
          "freeCancellationPossible": {
            "type": "boolean",
            "description": "Is free cancellation possible"
          },
          "freeCancellationDeadlineLocal": {
            "type": "string",
            "description": "Date and time up to and inclusive, when booking can be cancelled free of charge (no penalty).\r\n\r\nIf ‘null’, see freeCancellationPossible.\r\n\r\n‘null’ and freeCancellationPossible=true - free cancellation only\r\n\r\n‘null’ and freeCancellationPossible=false - free cancellation is not possible\r\n\r\n\r\nLocal date and time for the hotel.\r\n\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm\r\n",
            "format": "date-time",
            "nullable": true,
            "example": "2026-08-24T12:00"
          },
          "freeCancellationDeadlineUtc": {
            "type": "string",
            "description": "Same as freeCancellationDeadlineLocal, but date and time in UTC.\r\n\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mmZ",
            "format": "date-time",
            "nullable": true,
            "example": "2026-08-24T09:00Z"
          },
          "penaltyAmount": {
            "type": "number",
            "description": "Amount of penalty for cancellation of the nearest cancellation condition, for the duration of search.\r\n\r\nFor instance, freeCancellationDeadline=2019-09-30T09:00Z, if cancelled on 2019-09-30T09:01Z, the penalty will be equal to penaltyAmount.\r\n\r\nnull - always free cancellation.\r\n\r\nDepending on the date of cancellation, the amount of the penalty may vary in both directions.",
            "format": "double",
            "nullable": true,
            "example": 9.72
          }
        },
        "additionalProperties": false,
        "description": "Cancellation policy entity"
      },
      "SearchApi_ChildrenServiceCount": {
        "type": "object",
        "properties": {
          "age": {
            "type": "integer",
            "description": "Child age",
            "format": "int32",
            "example": 5
          },
          "count": {
            "type": "integer",
            "description": "Number of extra services provided to children depending on their age",
            "format": "int32",
            "example": 2
          }
        },
        "additionalProperties": false
      },
      "SearchApi_DailyRate": {
        "type": "object",
        "properties": {
          "priceBeforeTax": {
            "type": "number",
            "description": "Price per night excluding taxes and fees",
            "format": "double",
            "example": 76.47
          },
          "date": {
            "type": "string",
            "description": "Date. Date format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2026-08-25"
          }
        },
        "additionalProperties": false,
        "description": "Daily rate"
      },
      "SearchApi_DetailedRoomStay": {
        "required": [
          "availability",
          "cancellationPolicy",
          "checksum",
          "currencyCode",
          "extraServicesAvailable",
          "fullPlacementsName",
          "guestCount",
          "propertyId",
          "ratePlan",
          "roomType",
          "stayDates",
          "total"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID",
            "example": "1024"
          },
          "roomType": {
            "$ref": "#/components/schemas/SearchApi_DetailedRoomType"
          },
          "ratePlan": {
            "$ref": "#/components/schemas/SearchApi_RatePlan"
          },
          "guestCount": {
            "$ref": "#/components/schemas/SearchApi_GuestCount"
          },
          "stayDates": {
            "$ref": "#/components/schemas/SearchApi_StayDates"
          },
          "availability": {
            "type": "integer",
            "description": "Number of accommodations available",
            "format": "int32",
            "example": 50
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Prices currency at the accommodation",
            "example": "GBP"
          },
          "dailyRates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_DailyRate"
            },
            "description": "Price breakdown by day",
            "nullable": true
          },
          "total": {
            "$ref": "#/components/schemas/SearchApi_Total"
          },
          "cancellationPolicy": {
            "$ref": "#/components/schemas/SearchApi_CancellationPolicy"
          },
          "includedServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_IncludedRoomStayService"
            },
            "description": "Extra services included",
            "nullable": true,
            "example": [
              {
                "id": "46545",
                "mealPlanCode": null
              }
            ]
          },
          "mealPlanCode": {
            "type": "string",
            "description": "Meal plan code\r\n\r\nIf a Meal included, the Meal plan code is specified,\r\n\r\notherwise the Meal plan code is RoomOnly",
            "nullable": true,
            "example": "RoomOnly"
          },
          "checksum": {
            "minLength": 1,
            "type": "string",
            "description": "Check hash sum of accommodation conditions",
            "example": "eyJDaGVja3N1bVdpdGhPdXRFeHRyYXMiOnsiVG90YWxBbW91bnRBZnRlclRheCI6IjU1LjUwIiwiQ3VycmVuY3lDb2RlIjoiR0JQIiwiU3RhcnRQZW5hbHR5QW1vdW50IjoiOS43MiJ9LCJDaGVja3N1bVdpdGhFeHRyYXMiOnsiVG90YWxBbW91bnRBZnRlclRheCI6IjU1LjUwIiwiQ3VycmVuY3lDb2RlIjoiR0JQIiwiU3RhcnRQZW5hbHR5QW1vdW50IjoiOS43MiJ9fQ=="
          },
          "fullPlacementsName": {
            "minLength": 1,
            "type": "string",
            "description": "String description of accommodation options",
            "example": "2 adults in adult beds, 1 child in an extra bed."
          },
          "bookingFormLink": {
            "type": "string",
            "description": "Direct link to the hotel official booking form website.\r\nLink contains the necessary parameters to make a reservation by current rate.\r\n\r\nSpecified only for metasearch partners",
            "nullable": true,
            "example": ""
          },
          "availableDiscounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_AvailableDiscount"
            },
            "description": "Available discounts. Applicability of discounts is determined at the booking stage.",
            "nullable": true
          },
          "extraServicesAvailable": {
            "type": "boolean",
            "description": "Extra services available"
          }
        },
        "additionalProperties": false,
        "description": "Room stay entity"
      },
      "SearchApi_DetailedRoomType": {
        "required": [
          "id",
          "placements"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Room type ID",
            "example": "45687"
          },
          "placements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_Placement"
            },
            "description": "Accommodations entity"
          }
        },
        "additionalProperties": false,
        "description": "Detailed room type entity"
      },
      "SearchApi_DiscountReason": {
        "enum": [
          "StayDatesDiscount",
          "RegistrationDiscount",
          "LoyaltyDiscount"
        ],
        "type": "string",
        "description": "Discount reason type:\r\n\r\nStayDatesDiscount - Discount for the specified dates.\r\n\r\nRegistrationDiscount - Discount for registration on the property site.\r\n\r\nLoyaltyDiscount - Discount for the loyalty program on the property site.\r\n"
      },
      "SearchApi_ExtraStay": {
        "required": [
          "currencyCode",
          "dateTimeLocal",
          "total"
        ],
        "type": "object",
        "properties": {
          "total": {
            "$ref": "#/components/schemas/SearchApi_Total"
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Price currency",
            "example": "GBP"
          },
          "dateTimeLocal": {
            "type": "string",
            "description": "Local property time and date of early check-in/late check-out\r\n\r\nDate and time format complies with ISO-8601 YYYY-MM-DDThh:mm",
            "format": "date-time",
            "example": "2026-08-25T12:00"
          },
          "isOccupyQuota": {
            "type": "boolean",
            "description": "Indicates whether the quota is guaranteed to be occupied.\r\nIf set to true, the quota is guaranteed to be available.\r\nIf set to false, the quota availability is not guaranteed.",
            "example": false
          }
        },
        "additionalProperties": false
      },
      "SearchApi_ExtraStays": {
        "required": [
          "earlyCheckIn",
          "lateCheckOut"
        ],
        "type": "object",
        "properties": {
          "earlyCheckIn": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_ExtraStay"
            },
            "description": "Array of extra stay details for early check-ins"
          },
          "lateCheckOut": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_ExtraStay"
            },
            "description": "Array of extra stay details for late check-outs"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_GuestCount": {
        "required": [
          "adultCount",
          "childAges"
        ],
        "type": "object",
        "properties": {
          "adultCount": {
            "type": "integer",
            "description": "Number of adults",
            "format": "int32",
            "example": 1
          },
          "childAges": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Child age range",
            "example": [
              5
            ]
          }
        },
        "additionalProperties": false,
        "description": "Number of guests entity"
      },
      "SearchApi_IncludedRoomStayService": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Service ID",
            "example": "8765"
          },
          "mealPlanCode": {
            "type": "string",
            "description": "Meal plan code\r\n\r\nIf the service is Meal, the Meal plan code is specified,\r\n\r\notherwise, the meal plan code is not transferred (null)",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Additional service for accommodation,\r\n\r\nincluded in the rate plan\r\n\r\nmealPlanCode - indicated if the service type is Catering, otherwise null"
      },
      "SearchApi_MealPlanType": {
        "enum": [
          "AllInclusive",
          "BuffetBreakfast",
          "ContinentalBreakfast",
          "EnglishBreakfast",
          "FullBoard",
          "HalfBoard",
          "BreakFast",
          "Lunch",
          "Dinner",
          "FullBoardBuffet",
          "FullBoardCarte",
          "BuffetDinner",
          "DinnerCarte",
          "Custom",
          "HalfBoardLunch",
          "HalfBoardDinner",
          "AmericanBreakfast",
          "HalfBoardLunchDinner",
          "UltraAllInclusive"
        ],
        "type": "string",
        "description": "Meal plan codes: \r\n\r\nAllInclusive \r\n\r\nBuffetBreakfast \r\n\r\nContinentalBreakfast \r\n\r\nEnglishBreakfast \r\n\r\nFullBoard \r\n\r\nHalfBoard \r\n\r\nBreakFast \r\n\r\nLunch \r\n\r\nDinner \r\n\r\nFullBoardBuffet \r\n\r\nFullBoardCarte \r\n\r\nBuffetDinner \r\n\r\nDinnerCarte \r\n\r\nCustom \r\n\r\nHalfBoardLunch \r\n\r\nHalfBoardDinner \r\n\r\nAmericanBreakfast \r\n\r\nHalfBoardLunchDinner \r\n\r\nUltraAllInclusive \r\n",
        "example": "BreakFast"
      },
      "SearchApi_MealPreference": {
        "type": "object",
        "properties": {
          "mealType": {
            "$ref": "#/components/schemas/SearchApi_MealPreferenceType"
          },
          "mealsIncluded": {
            "$ref": "#/components/schemas/SearchApi_MealsIncluded"
          }
        },
        "additionalProperties": false,
        "description": "Meal filters"
      },
      "SearchApi_MealPreferenceType": {
        "enum": [
          "All",
          "MealOnly",
          "RoomOnly"
        ],
        "type": "string",
        "description": "Meal types:\r\n\r\nAll - Display of accommodations with minimum price. If MealsIncluded is specified, display accommodations without meal included or with the selected meals\r\n\r\nMealOnly - Display of accommodations with meal included, if a hotel has no accommodations with meal included, it is not in the output\r\n\r\nRoomOnly - Display of accommodations without any meal included\r\n",
        "example": "MealOnly"
      },
      "SearchApi_MealsIncluded": {
        "type": "object",
        "properties": {
          "mealPlanCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_MealPlanType"
            },
            "description": "Used to identify the types of meals included",
            "nullable": true,
            "example": [
              "BreakFast"
            ]
          }
        },
        "additionalProperties": false,
        "description": "Defines which specific meals are included in stay.\r\n\r\nThe filter allows you to display the lowest cost of stay with a specific meal included for each stay.\r\n\r\nFor example, if you specify MealsIncluded.MealPlanCodes [“BreakFast”] in the request - in the response,\r\n\r\nyou can get the minimum cost of stay with only the “BreakFast” MealType only.\r\n\r\nResponse will not contain “AllInclusive” or “HalfBoard”.\r\n\r\nMealsIncluded can be used only with the MealType: \"All\" or \"MealOnly\"\r\n"
      },
      "SearchApi_Placement": {
        "required": [
          "code",
          "count",
          "kind"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "String representation of accommodation",
            "example": "AdultBed-2"
          },
          "count": {
            "type": "integer",
            "description": "Number of accommodations",
            "format": "int32",
            "example": 2
          },
          "kind": {
            "$ref": "#/components/schemas/SearchApi_BookingPlacementKind"
          },
          "minAge": {
            "type": "integer",
            "description": "Minimum age in the age group\r\n\r\nSpecified for child accommodation only\r\n(Kind = Child | ExtraChild | ChildBandWithoutBed)",
            "format": "int32",
            "nullable": true
          },
          "maxAge": {
            "type": "integer",
            "description": "Maximum age in the age group\r\n\r\nSpecified for child accommodation only\r\n\r\n(Kind = Child | ExtraChild | ChildBandWithoutBed)",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Accommodation in a room"
      },
      "SearchApi_PlacementRq": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "String representation of accommodation",
            "example": "AdultBed-2"
          }
        },
        "additionalProperties": false,
        "description": "Accommodation in a room"
      },
      "SearchApi_PricePreference": {
        "type": "object",
        "properties": {
          "currencyCode": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "description": "The code defining the monetary unit. Use ISO 4217, a three-letter code, accommodations without this currency will not appear in the output",
            "nullable": true,
            "example": "GBP"
          },
          "minPrice": {
            "type": "number",
            "description": "Minimum accommodation price",
            "format": "double",
            "nullable": true,
            "example": 0
          },
          "maxPrice": {
            "type": "number",
            "description": "Maximum accommodation price",
            "format": "double",
            "nullable": true,
            "example": 10000
          }
        },
        "additionalProperties": false,
        "description": "Price filters"
      },
      "SearchApi_QuantityByGuests": {
        "type": "object",
        "properties": {
          "adultsServiceQuantity": {
            "type": "integer",
            "description": "Number of extra services for adult guests",
            "format": "int32",
            "example": 1
          },
          "childrenServiceQuantity": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_ChildrenServiceCount"
            },
            "description": "Number of extra services for child guests",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Number of extra services provided depending on the age of the guests"
      },
      "SearchApi_RatePlan": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Rate plan ID",
            "example": "987657"
          },
          "corporateCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Codes for which corporates clients this rate is allowed. \r\n\r\nIf collection contains codes, it means that this rate allowed to specified corporate clients.",
            "nullable": true
          },
          "corporateIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ids of corporate clients for which this rate is allowed. \r\n\r\nIf collection contains ids, it means that this rate is allowed to specified corporate clients.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Rate plan entity"
      },
      "SearchApi_RoomStayExtraService": {
        "required": [
          "calculationMethod",
          "currencyCode",
          "id",
          "kind",
          "mealPlanCode",
          "total"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Service ID",
            "example": "8770"
          },
          "kind": {
            "$ref": "#/components/schemas/SearchApi_ServiceKind"
          },
          "mealPlanCode": {
            "minLength": 1,
            "type": "string",
            "description": "Meal plan code\r\n\r\nIf the service refers to Meal, the Meal plan code is specified;\r\n\r\notherwise, the meal plan code is not sent (null).",
            "example": "Dinner"
          },
          "maxQuantity": {
            "type": "integer",
            "description": "Maximum number of extra services\r\n\r\nThis parameter is used for the \"Per use\" charge type.",
            "format": "int32",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "description": "Number of extra services\r\n\r\nThis parameter is used for \"PerStay\", \"PerPerson\", and \"PerUse\" charge types.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Price currency",
            "example": "GBP"
          },
          "calculationMethod": {
            "$ref": "#/components/schemas/SearchApi_CalculationMethod"
          },
          "total": {
            "$ref": "#/components/schemas/SearchApi_Total"
          },
          "quantityByGuests": {
            "$ref": "#/components/schemas/SearchApi_QuantityByGuests"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_RoomType": {
        "required": [
          "id",
          "placements"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Room type ID",
            "example": "45687"
          },
          "placements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_Placement"
            },
            "description": "Accommodations entity"
          }
        },
        "additionalProperties": false,
        "description": "Short room type entity"
      },
      "SearchApi_RoomTypeRq": {
        "required": [
          "id",
          "placements"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Room type ID",
            "example": "82751"
          },
          "placements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_PlacementRq"
            },
            "description": "Accommodations entity"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_SearchByPropertyResponse": {
        "required": [
          "roomStays"
        ],
        "type": "object",
        "properties": {
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_DetailedRoomStay"
            },
            "description": "Accommodation options"
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_Warning"
            },
            "description": "Warnings",
            "nullable": true,
            "example": [
              null
            ]
          }
        },
        "additionalProperties": false,
        "description": "Groups of a search for accommodation options by accommodation in general;\r\nincludes accommodation and services\r\nthat can be used when booking"
      },
      "SearchApi_SearchExtraServicesByPropertyResponse": {
        "type": "object",
        "properties": {
          "roomStayExtraServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_RoomStayExtraService"
            },
            "description": "Room stay extra services",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SearchApi_SearchExtraStaysByPropertyResponse": {
        "type": "object",
        "properties": {
          "extraStays": {
            "$ref": "#/components/schemas/SearchApi_ExtraStays"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_SearchExtraStaysCriteria": {
        "type": "object",
        "properties": {
          "stayDates": {
            "$ref": "#/components/schemas/SearchApi_StayDates"
          },
          "roomType": {
            "$ref": "#/components/schemas/SearchApi_RoomTypeRq"
          },
          "ratePlan": {
            "$ref": "#/components/schemas/SearchApi_RatePlan"
          },
          "guestCount": {
            "$ref": "#/components/schemas/SearchApi_GuestCount"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_SearchServicesCriteria": {
        "required": [
          "guestCount",
          "ratePlan",
          "roomType",
          "stayDates"
        ],
        "type": "object",
        "properties": {
          "stayDates": {
            "$ref": "#/components/schemas/SearchApi_StayDates"
          },
          "roomType": {
            "$ref": "#/components/schemas/SearchApi_RoomTypeRq"
          },
          "ratePlan": {
            "$ref": "#/components/schemas/SearchApi_RatePlan"
          },
          "guestCount": {
            "$ref": "#/components/schemas/SearchApi_GuestCount"
          }
        },
        "additionalProperties": false
      },
      "SearchApi_ServiceKind": {
        "enum": [
          "Common",
          "Meal"
        ],
        "type": "string",
        "description": "Service type:\r\n\r\nCommon - common service\r\n\r\nMeal - meal service",
        "example": "Meal"
      },
      "SearchApi_ShortRoomStay": {
        "required": [
          "currencyCode",
          "fullPlacementsName",
          "propertyId",
          "ratePlan",
          "roomType",
          "total"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Property ID",
            "example": "1024"
          },
          "roomType": {
            "$ref": "#/components/schemas/SearchApi_RoomType"
          },
          "ratePlan": {
            "$ref": "#/components/schemas/SearchApi_RatePlan"
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Prices currency at the accommodation",
            "example": "GBP"
          },
          "dailyRates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_DailyRate"
            },
            "description": "Price breakdown by day",
            "nullable": true
          },
          "total": {
            "$ref": "#/components/schemas/SearchApi_Total"
          },
          "includedServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_IncludedRoomStayService"
            },
            "description": "Extra services included",
            "nullable": true,
            "example": [
              {
                "id": "46545",
                "mealPlanCode": null
              }
            ]
          },
          "mealPlanCode": {
            "type": "string",
            "description": "Meal plan code\r\n\r\nIf a Meal included, the Meal plan code is specified,\r\n\r\notherwise the Meal plan code is RoomOnly",
            "nullable": true,
            "example": "RoomOnly"
          },
          "bookingFormLink": {
            "type": "string",
            "description": "Direct link to the hotel official booking form website.\r\nLink contains the necessary parameters to make a reservation by current rate.\r\n\r\nSpecified only for metasearch partners",
            "nullable": true,
            "example": ""
          },
          "availableDiscounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_AvailableDiscount"
            },
            "description": "Available discounts. Applicability of discounts is determined at the booking stage.",
            "nullable": true
          },
          "fullPlacementsName": {
            "minLength": 1,
            "type": "string",
            "description": "String description of accommodation options",
            "example": "2 adults in adult beds, 1 child in an extra bed."
          }
        },
        "additionalProperties": false,
        "description": "Brief overview of the accommodation option"
      },
      "SearchApi_SimpleSearchCriteria": {
        "required": [
          "adults",
          "arrivalDate",
          "departureDate"
        ],
        "type": "object",
        "properties": {
          "propertyIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Accommodations IDs\r\n\r\nMaximum number of IDs - 200",
            "nullable": true,
            "example": [
              "1024",
              "11"
            ]
          },
          "adults": {
            "type": "integer",
            "description": "Number of adults",
            "format": "int32",
            "example": 1
          },
          "childAges": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Child age range",
            "nullable": true,
            "example": [
              5
            ]
          },
          "include": {
            "type": "string",
            "description": "Add additional information about room types and rate plans to the response \r\n\r\nempty by default, but values can be accepted as follows:\r\n\r\nroomTypeShortContent - content by room types only\r\n\r\nratePlanShortContent - content by rate plans only\r\n\r\nroomTypeShortContent|ratePlanShortContent - content by both rate plans and room types",
            "nullable": true,
            "example": ""
          },
          "arrivalDate": {
            "type": "string",
            "description": "Check-in date.\r\n\r\nDate format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2026-08-24"
          },
          "departureDate": {
            "type": "string",
            "description": "Check-out date.\r\n\r\nDate format complies with ISO-8601 YYYY-MM-DD",
            "format": "date-time",
            "example": "2026-08-25"
          },
          "mealPreference": {
            "$ref": "#/components/schemas/SearchApi_MealPreference"
          },
          "pricePreference": {
            "$ref": "#/components/schemas/SearchApi_PricePreference"
          },
          "corporateIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Corporate clients identifiers to identify corporate clients\r\n\r\nRate plans for requested corporate clients to be included in the search results",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Search parameters\r\n"
      },
      "SearchApi_StayDates": {
        "required": [
          "arrivalDateTime",
          "departureDateTime"
        ],
        "type": "object",
        "properties": {
          "arrivalDateTime": {
            "type": "string",
            "description": "Local check-in date and time for the hotel.\r\n\r\nDate and time format complies with ISO-8601 YYYY-MM-DDThh:mm",
            "format": "date-time",
            "example": "2026-08-24T14:00"
          },
          "departureDateTime": {
            "type": "string",
            "description": "Local check-out date and time for the hotel.\r\n\r\nFormat complies with ISO-8601 YYYY-MM-DDThh:mm",
            "format": "date-time",
            "example": "2026-08-25T12:00"
          }
        },
        "additionalProperties": false,
        "description": "Period of stay"
      },
      "SearchApi_Tax": {
        "required": [
          "amount",
          "name"
        ],
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "description": "Amount of tax or fee",
            "format": "double",
            "example": 5.5
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Tax name",
            "example": "Lodging fee"
          },
          "description": {
            "type": "string",
            "description": "Tax description",
            "nullable": true,
            "example": "Fee per guest, payable at check-in"
          }
        },
        "additionalProperties": false,
        "description": "Taxes and fees"
      },
      "SearchApi_Total": {
        "required": [
          "priceBeforeTax",
          "taxAmount"
        ],
        "type": "object",
        "properties": {
          "priceBeforeTax": {
            "type": "number",
            "description": "Price excluding taxes and fees to be paid at check-in",
            "format": "double",
            "example": 50.5
          },
          "taxAmount": {
            "type": "number",
            "description": "Amount of taxes and fees to be paid at check-in",
            "format": "double",
            "example": 5.5
          },
          "taxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchApi_Tax"
            },
            "description": "Taxes and fees to be paid at check-in",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Total for stay"
      },
      "SearchApi_Warning": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true,
            "example": "NotEnoughRights"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "example": "Not enough rights to hotel"
          }
        },
        "additionalProperties": false
      },
      "PmsApi_AccommodationInventory": {
        "type": "object",
        "properties": {
          "buildings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Building"
            },
            "description": "List of buildings",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PmsApi_AddGuestPersonalDocumentFilesRequest": {
        "type": "object",
        "properties": {
          "files": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_FileInfo"
            },
            "description": "Details of files to upload",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request to upload one or more guest identity document files"
      },
      "PmsApi_AgentCommission": {
        "type": "object",
        "properties": {
          "percent": {
            "type": "number",
            "description": "Commission percent that was used to derive AgentCommissionAmount.\r\nSet only when Source is Pms; null otherwise.",
            "format": "double",
            "nullable": true
          },
          "calculationSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_CommissionCalculationSource"
              }
            ],
            "description": "Source of commission calculation.\n New values can be added (enum is not frozen).\n- **Pms**: The commission is calculated based on the agent company's settings in PMS.\n- **Ota**: The commission is calculated by the OTA."
          },
          "amount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Agent commission amount applied to the booking.",
            "nullable": true
          },
          "discount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Total amount of discounts granted at the expense of the agent commission.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Agent commission applied to the booking."
      },
      "PmsApi_Amenity": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Amenity name",
            "nullable": true,
            "example": "Swimming pool"
          }
        },
        "additionalProperties": false,
        "description": "Guest preference (amenity)"
      },
      "PmsApi_Amount": {
        "type": "object",
        "properties": {
          "value": {
            "type": "number",
            "description": "Monetary amount",
            "format": "double",
            "example": 10000.11
          },
          "currencyCode": {
            "type": "string",
            "description": "Three-letter ISO-4217 currency code",
            "nullable": true,
            "example": "USD"
          }
        },
        "additionalProperties": false,
        "description": "Amount with currency"
      },
      "PmsApi_ApiResponse": {
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Standard API response container with warnings and errors"
      },
      "PmsApi_AvailableRoomForRoomStay": {
        "type": "object",
        "properties": {
          "pmsRoomStayId": {
            "type": "string",
            "description": "Stay identifier in PMS",
            "nullable": true,
            "example": "4503599628227391"
          },
          "currentRoomId": {
            "type": "string",
            "description": "Currently assigned room ID",
            "nullable": true,
            "example": "4503599628227391"
          },
          "roomIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of rooms available for check-in",
            "nullable": true,
            "example": [
              "4503599628227391",
              "4503599628227392"
            ]
          }
        },
        "additionalProperties": false,
        "description": "Available rooms/suites for a given room stay"
      },
      "PmsApi_Building": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Building unique identifier",
            "nullable": true,
            "example": "4503599628227393"
          },
          "name": {
            "type": "string",
            "description": "Building name",
            "nullable": true,
            "example": "Main building"
          },
          "floors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Floor"
            },
            "description": "List of floors",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PmsApi_CommissionCalculationSource": {
        "enum": [
          "Pms",
          "Ota"
        ],
        "type": "string",
        "description": "Source of commission calculation.\n New values can be added (enum is not frozen).\n- **Pms**: The commission is calculated based on the agent company's settings in PMS.\n- **Ota**: The commission is calculated by the OTA."
      },
      "PmsApi_Company": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Company unique identifier in PMS",
            "nullable": true,
            "example": "4503599628227391"
          },
          "name": {
            "type": "string",
            "description": "Company name",
            "nullable": true,
            "example": "Undefined Incorporated"
          },
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_CompanyType"
              }
            ],
            "description": "Company type\n New values will not be added (enum is frozen).\n- **Customer**: Customer company\n- **Payer**: Agent company",
            "example": "Customer"
          }
        },
        "additionalProperties": false,
        "description": "Company entity in PMS"
      },
      "PmsApi_CompanyType": {
        "enum": [
          "Customer",
          "Payer"
        ],
        "type": "string",
        "description": "Type of company\n New values will not be added (enum is frozen).\n- **Customer**: Customer company\n- **Payer**: Agent company"
      },
      "PmsApi_Email": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Email address",
            "nullable": true,
            "example": "abc@abc.com"
          }
        },
        "additionalProperties": false,
        "description": "Email"
      },
      "PmsApi_FileInfo": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "File contents in Base64 (max 2 MB)",
            "nullable": true,
            "example": "base64"
          },
          "name": {
            "type": "string",
            "description": "File name with extension.\r\n\r\nSupported file extensions: \".pdf\", \".jpg\", \".jpeg\", \".png\", \".gif\".",
            "nullable": true,
            "example": "jackal.jpg"
          }
        },
        "additionalProperties": false,
        "description": "File content and name"
      },
      "PmsApi_FindCompaniesResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "companies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Company"
            },
            "description": "Array of Company objects"
          }
        },
        "additionalProperties": false,
        "description": "List of companies"
      },
      "PmsApi_FindGuestLoyaltyCardsResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "loyaltyCards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_PersonLoyalty"
            },
            "description": "Array of PersonLoyalty objects"
          }
        },
        "additionalProperties": false,
        "description": "List of guest loyalty cards"
      },
      "PmsApi_FindGuestRoomStaysResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_RoomStay"
            },
            "description": "Array of RoomStay objects"
          }
        },
        "additionalProperties": false,
        "description": "List of room stays for a guest"
      },
      "PmsApi_FindGuestsResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "guests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Person"
            },
            "description": "Array of Person objects"
          }
        },
        "additionalProperties": false,
        "description": "Search results of guest profiles"
      },
      "PmsApi_FindInvoicesResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "invoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Invoice"
            },
            "description": "Array of Invoice objects"
          }
        },
        "additionalProperties": false,
        "description": "List of invoices by reservation"
      },
      "PmsApi_FindReservationRoomsResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "availableRoomForRoomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_AvailableRoomForRoomStay"
            },
            "description": "Array of AvailableRoomForRoomStay objects"
          }
        },
        "additionalProperties": false,
        "description": "List of available rooms/suites per stay"
      },
      "PmsApi_FindReservationsResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "reservations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ReservationInfo"
            },
            "description": "Array of ReservationInfo objects"
          }
        },
        "additionalProperties": false,
        "description": "List of reservations by filters"
      },
      "PmsApi_FindRoomsResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "rooms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Room"
            },
            "description": "Array of Room objects"
          }
        },
        "additionalProperties": false
      },
      "PmsApi_Floor": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Floor unique identifier",
            "nullable": true,
            "example": "440357547227393"
          },
          "name": {
            "type": "string",
            "description": "Floor name",
            "nullable": true,
            "example": "1st floor"
          },
          "rooms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Room"
            },
            "description": "List of rooms",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PmsApi_Gender": {
        "enum": [
          "Male",
          "Female",
          "Unknown"
        ],
        "type": "string",
        "description": "Gender\n New values will not be added (enum is frozen).\n- **Male**: Male\n- **Female**: Female\n- **Unknown**: Unknown"
      },
      "PmsApi_GetGuestResponse": {
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "guest": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Person"
              }
            ],
            "description": "Person or guest information"
          }
        },
        "additionalProperties": false,
        "description": "Guest profile details"
      },
      "PmsApi_GetPaymentSystemsForPaymentResponse": {
        "required": [
          "hasNextPage",
          "nextPageToken"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "nextPageToken": {
            "type": "string",
            "description": "Token to fetch the next page",
            "nullable": true,
            "example": "b24aRNO0Q0WD2CLexb8G6EnqlYqQTWUdGdkrh9DqjLYBthewTbDErm55sLvB+41A5p8aoDpkA6CG1QCGz63jBOqWcPrwZoHwDLUnPp6HZx4FKcRzBSrItBLY2QpAOWxYZnAF57I8dPg7/fgj/xgWEWT/M9qwM8MNihVJX1twL2jABZ3pG49qjbMJMUpXAHdnFtMNjV1ILwg+WhOXnnHjr+4BdmSTiQMAvo3inEewRRg="
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "Indicates if more pages are available",
            "example": true
          },
          "paymentSystems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_PaymentSystem"
            },
            "description": "List of payment systems"
          }
        },
        "additionalProperties": false,
        "description": "List of available payment methods"
      },
      "PmsApi_GetReservationResponse": {
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "reservation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Reservation"
              }
            ],
            "description": "Detailed reservation record"
          }
        },
        "additionalProperties": false,
        "description": "Reservation details"
      },
      "PmsApi_GuestCount": {
        "type": "object",
        "properties": {
          "adults": {
            "type": "integer",
            "description": "Number of adults",
            "format": "int32",
            "example": 2
          },
          "children": {
            "type": "integer",
            "description": "Number of children",
            "format": "int32",
            "example": 3
          }
        },
        "additionalProperties": false,
        "description": "Breakdown of guest counts by age"
      },
      "PmsApi_GuestStatus": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Status identifier",
            "nullable": true,
            "example": "0"
          },
          "displayName": {
            "type": "string",
            "description": "Localized name of status",
            "nullable": true,
            "example": "Not selected"
          }
        },
        "additionalProperties": false,
        "description": "Status of a guest"
      },
      "PmsApi_Invoice": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "Invoice number",
            "nullable": true,
            "example": "20150823-1111-676271-01"
          },
          "pmsRoomStayId": {
            "type": "string",
            "description": "Room stay ID in PMS (null if group billing)",
            "nullable": true,
            "example": "4503599628227391"
          },
          "payer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Payer"
              }
            ],
            "description": "Information about who pays the invoice",
            "nullable": true
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_InvoiceItem"
            },
            "description": "Line items on the invoice",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Invoice data for a reservation"
      },
      "PmsApi_InvoiceItem": {
        "required": [
          "vat"
        ],
        "type": "object",
        "properties": {
          "accountingCode": {
            "type": "string",
            "description": "Accounting code for analytics",
            "nullable": true,
            "example": "6945A37BC11CE3F42738E4EAA1D109699A08645006B837F66D7C684A4E7454F3"
          },
          "name": {
            "type": "string",
            "description": "Description of the item",
            "nullable": true,
            "example": "Accomodation"
          },
          "kind": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_InvoiceItemKind"
              }
            ],
            "description": "Invoice item type\n New values can be added (enum is not frozen).\n- **RoomType**: Room stay\n- **Option**: Service\n- **Transfer**: Transfer",
            "example": "RoomType"
          },
          "total": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Cost of an invoice item, tax INCLUDED",
            "nullable": true
          },
          "vat": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Vat"
              }
            ],
            "description": "VAT",
            "nullable": true
          },
          "quantity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_InvoiceItemQuantity"
              }
            ],
            "description": "Item quantity",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Single line item on an invoice"
      },
      "PmsApi_InvoiceItemKind": {
        "enum": [
          "RoomType",
          "Option",
          "Transfer"
        ],
        "type": "string",
        "description": "Kind of invoice item\n New values can be added (enum is not frozen).\n- **RoomType**: Room stay\n- **Option**: Service\n- **Transfer**: Transfer"
      },
      "PmsApi_InvoiceItemQuantity": {
        "type": "object",
        "properties": {
          "value": {
            "type": "integer",
            "description": "Quantity number",
            "format": "int32",
            "example": 10
          },
          "unit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_InvoiceItemQuantityType"
              }
            ],
            "description": "Unit\n New values can be added (enum is not frozen).\n- **Pcs**: Pieces\n- **Hours**: Hours\n- **Nights**: Nights",
            "example": "Pcs"
          }
        },
        "additionalProperties": false,
        "description": "Quantity details for an invoice item"
      },
      "PmsApi_InvoiceItemQuantityType": {
        "enum": [
          "Pcs",
          "Hours",
          "Nights"
        ],
        "type": "string",
        "description": "Unit of measure for invoice item\n New values can be added (enum is not frozen).\n- **Pcs**: Pieces\n- **Hours**: Hours\n- **Nights**: Nights"
      },
      "PmsApi_ObtainAccommodationInventoryResponse": {
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "accommodationInventory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_AccommodationInventory"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "PmsApi_Payer": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name of payer (person or company)",
            "nullable": true,
            "example": "John Richard Doe"
          }
        },
        "additionalProperties": false,
        "description": "Information about who pays the invoice"
      },
      "PmsApi_PaymentActionKind": {
        "enum": [
          "Payment",
          "Refund"
        ],
        "type": "string",
        "description": "Transaction direction\n New values can be added (enum is not frozen).\n- **Payment**: Payment\n- **Refund**: Refund"
      },
      "PmsApi_PaymentSystem": {
        "type": "object",
        "properties": {
          "pmsPaymentSystemId": {
            "type": "string",
            "description": "Payment system ID in PMS",
            "nullable": true,
            "example": "0oHjfSIZS0ng=="
          },
          "displayName": {
            "type": "string",
            "description": "Human-readable name of payment system",
            "nullable": true,
            "example": "Bank transfer for legal entities"
          }
        },
        "additionalProperties": false,
        "description": "Payment System"
      },
      "PmsApi_Person": {
        "type": "object",
        "properties": {
          "pmsPersonId": {
            "type": "string",
            "description": "Unique identifier in PMS",
            "nullable": true,
            "example": "4503599627465719"
          },
          "personName": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_PersonName"
              }
            ],
            "description": "Person name",
            "nullable": true
          },
          "birthDate": {
            "type": "string",
            "description": "Date of birth in ISO-8601 YYYY-MM-DD format",
            "nullable": true,
            "example": "1999-09-09"
          },
          "citizenship": {
            "type": "string",
            "description": "ISO-3166-1 alpha-3 country code",
            "nullable": true,
            "example": "NLD"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_GuestStatus"
              }
            ],
            "description": "Guest status",
            "nullable": true
          },
          "emails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Email"
            },
            "description": "List of email addresses",
            "nullable": true
          },
          "phones": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Phone"
            },
            "description": "List of phone records",
            "nullable": true
          },
          "gender": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Gender"
              }
            ],
            "description": "Gender\n New values will not be added (enum is frozen).\n- **Male**: Male\n- **Female**: Female\n- **Unknown**: Unknown",
            "example": "Male"
          }
        },
        "additionalProperties": false,
        "description": "Person or guest information"
      },
      "PmsApi_PersonLoyalty": {
        "type": "object",
        "properties": {
          "programId": {
            "type": "string",
            "description": "Loyalty program identifier",
            "nullable": true,
            "example": "1234567"
          },
          "cardNumber": {
            "type": "string",
            "description": "Loyalty card number",
            "nullable": true,
            "example": "1234567"
          }
        },
        "additionalProperties": false,
        "description": "Guest loyalty card details"
      },
      "PmsApi_PersonName": {
        "type": "object",
        "properties": {
          "lastName": {
            "type": "string",
            "description": "Family name",
            "nullable": true,
            "example": "Doe"
          },
          "firstName": {
            "type": "string",
            "description": "Given name",
            "nullable": true,
            "example": "John"
          },
          "middleName": {
            "type": "string",
            "description": "Middle name",
            "nullable": true,
            "example": "M."
          }
        },
        "additionalProperties": false,
        "description": "First name, last name and middle name"
      },
      "PmsApi_PersonalDocumentType": {
        "enum": [
          "ForeignPassport",
          "InternationalPassportBiometric",
          "InternationalPassport",
          "TemporaryPassport",
          "BirthCertificate",
          "Diplomatic",
          "BirthCertificateForeign",
          "MilitaryOfficer",
          "ForeignPassportForeign",
          "Another",
          "DiplomaticForeign",
          "TemporaryResidence",
          "Residence",
          "TemporaryRefuge",
          "Cis",
          "WorkPassport",
          "ResidenceStateless",
          "NationalPassport",
          "KazPassport",
          "ResidenceStatelessBiometric",
          "TemporaryResidenceStateless",
          "TemporaryResidenceStatelessBlank",
          "Patent",
          "DriverLicense",
          "PersonalCard",
          "Passport"
        ],
        "type": "string",
        "description": "Type of personal document\n New values can be added (enum is not frozen).\n- **ForeignPassport**: International passport\n- **InternationalPassportBiometric**: International passport with biometrics\n- **InternationalPassport**: International passport of a Russian Federation citizen\n- **TemporaryPassport**: Temporary passport\n- **BirthCertificate**: Birth certificate\n- **Diplomatic**: Diplomatic passport of a Russian Federation citizen\n- **BirthCertificateForeign**: Foreign birth certificate\n- **MilitaryOfficer**: Officer ID card\n- **ForeignPassportForeign**: International passport issued outside the Russian Federation\n- **Another**: Another identity document\n- **DiplomaticForeign**: Diplomatic passport of a foreign citizen\n- **TemporaryResidence**: Temporary residence permit for a foreign citizen\n- **Residence**: Residence permit of a foreign citizen\n- **TemporaryRefuge**: Certificate of temporary refuge on the territory of the Russian Federation\n- **Cis**: Identity card of a citizen of CIS member states\n- **WorkPassport**: Service passport\n- **ResidenceStateless**: Residence permit of a stateless person\n- **NationalPassport**: National foreign passport\n- **KazPassport**: Identity card of a citizen of the Republic of Kazakhstan\n- **ResidenceStatelessBiometric**: Residence permit of a stateless person with biometrics\n- **TemporaryResidenceStateless**: Temporary residence permit of a stateless person (stamp)\n- **TemporaryResidenceStatelessBlank**: Temporary residence permit of a stateless person (blank)\n- **Patent**: Patent\n- **DriverLicense**: Driver license\n- **PersonalCard**: Identity card\n- **Passport**: Passport"
      },
      "PmsApi_Phone": {
        "type": "object",
        "properties": {
          "phoneNumber": {
            "type": "string",
            "description": "Phone Number",
            "nullable": true,
            "example": "+11111111111111111"
          }
        },
        "additionalProperties": false,
        "description": "Phone"
      },
      "PmsApi_Reservation": {
        "required": [
          "creationSource",
          "currencyCode",
          "customerLanguageCode"
        ],
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "Reservation number",
            "nullable": true,
            "example": "22200222-111-99999999"
          },
          "customerLanguageCode": {
            "type": "string",
            "description": "ISO 639-1 customer language code",
            "nullable": true,
            "example": "ru"
          },
          "visitPurpose": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_VisitPurpose"
              }
            ],
            "description": "Purpose of a visit",
            "nullable": true
          },
          "customerComment": {
            "type": "string",
            "description": "Customers comments",
            "nullable": true,
            "example": "I want room with the sea view"
          },
          "modifyDateTime": {
            "type": "string",
            "description": "Date and time of last modification in YYYY-MM-DDThh:mm:ssZ format (ISO 8601, UTC)",
            "nullable": true,
            "example": "2024-07-11T13:15:18Z"
          },
          "groupName": {
            "type": "string",
            "description": "Group name",
            "nullable": true,
            "example": "Wedding"
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO-4217 Three-letter currency code",
            "nullable": true,
            "example": "USD"
          },
          "customer": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Person"
              }
            ],
            "description": "Customer",
            "nullable": true
          },
          "customerCompany": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Company"
              }
            ],
            "description": "Customer company",
            "nullable": true
          },
          "creationSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_ReservationCreationSource"
              }
            ],
            "description": "Creation source",
            "nullable": true
          },
          "channelInformation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_ReservationChannelInformation"
              }
            ],
            "description": "Channel Information. Not null when creation source is channel",
            "nullable": true
          },
          "reservationStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_ReservationStatus"
              }
            ],
            "description": "Reservation status\n New values will not be added (enum is frozen).\n- **Unconfirmed**: Unconfirmed\n- **Confirmed**: Confirmed\n- **Cancelled**: Cancelled\n- **Released**: Released\n- **Pending**: Pending\n- **Edited**: Edited",
            "example": "Unconfirmed"
          },
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_RoomStay"
            },
            "description": "Room stays",
            "nullable": true
          },
          "agentCommission": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_AgentCommission"
              }
            ],
            "description": "Agent commission applied to the booking",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Detailed reservation record"
      },
      "PmsApi_ReservationChannelInformation": {
        "required": [
          "channelName"
        ],
        "type": "object",
        "properties": {
          "channelName": {
            "type": "string",
            "description": "Reservation channel name",
            "nullable": true,
            "example": "booking.com"
          }
        },
        "additionalProperties": false,
        "description": "Reservation channel details"
      },
      "PmsApi_ReservationCreationSource": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Source identifier in PMS",
            "nullable": true,
            "example": "999"
          },
          "name": {
            "type": "string",
            "description": "Localized name of creation source",
            "nullable": true,
            "example": "Channel"
          }
        },
        "additionalProperties": false,
        "description": "Reservation creation source details"
      },
      "PmsApi_ReservationInfo": {
        "required": [
          "number"
        ],
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "Reservation number",
            "nullable": true,
            "example": "22200222-111-99999999"
          }
        },
        "additionalProperties": false,
        "description": "Minimal reservation info"
      },
      "PmsApi_ReservationStatus": {
        "enum": [
          "Unconfirmed",
          "Confirmed",
          "Cancelled",
          "Released",
          "Pending",
          "Edited"
        ],
        "type": "string",
        "description": "Reservation status\n New values will not be added (enum is frozen).\n- **Unconfirmed**: Unconfirmed\n- **Confirmed**: Confirmed\n- **Cancelled**: Cancelled\n- **Released**: Released\n- **Pending**: Pending\n- **Edited**: Edited"
      },
      "PmsApi_ResponseError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error or warning code",
            "nullable": true,
            "example": "11"
          },
          "message": {
            "type": "string",
            "description": "Human-readable description of the issue",
            "nullable": true,
            "example": "Incorrect dates format"
          }
        },
        "additionalProperties": false,
        "description": "Error or warning item with code and message"
      },
      "PmsApi_Room": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Room or suite unique identifier",
            "nullable": true,
            "example": "324235253"
          },
          "displayName": {
            "type": "string",
            "description": "Room or suite display name",
            "nullable": true,
            "example": "111"
          },
          "roomTypeId": {
            "type": "string",
            "description": "Room or suite type identifier",
            "nullable": true,
            "example": "315367"
          },
          "floorId": {
            "type": "string",
            "description": "Floor identifier",
            "nullable": true,
            "example": "4"
          }
        },
        "additionalProperties": false,
        "description": "Room or suite details"
      },
      "PmsApi_RoomStay": {
        "type": "object",
        "properties": {
          "pmsRoomStayId": {
            "type": "string",
            "description": "Room stay identifier in PMS",
            "nullable": true,
            "example": "4503599628227391"
          },
          "roomId": {
            "type": "string",
            "description": "Assigned room identifier",
            "nullable": true,
            "example": "4503599627373585"
          },
          "roomTypeId": {
            "type": "string",
            "description": "Room type identifier",
            "nullable": true,
            "example": "315367"
          },
          "guestsIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IDs of guests on this stay",
            "nullable": true,
            "example": [
              "4503599627465719",
              "4503599627465718"
            ]
          },
          "checkInDateTime": {
            "type": "string",
            "description": "Scheduled check-in date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-11T14:00"
          },
          "checkOutDateTime": {
            "type": "string",
            "description": "Scheduled check-out date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-15T12:00"
          },
          "actualCheckInDateTime": {
            "type": "string",
            "description": "Actual check-in date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-11T16:15"
          },
          "actualCheckOutDateTime": {
            "type": "string",
            "description": "Actual check-out date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-11T16:15"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_RoomStayStatus"
              }
            ],
            "description": "Room stay status\n New values will not be added (enum is frozen).\n- **New**: New\n- **CheckedIn**: Checked in\n- **CheckedOut**: Checked out\n- **Cancelled**: Cancelled",
            "example": "New"
          },
          "guestCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_GuestCount"
              }
            ],
            "description": "Number of guests",
            "nullable": true
          },
          "deposit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Information about deposit in the stay details",
            "nullable": true
          },
          "totalPrice": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_TotalPrice"
              }
            ],
            "description": "Total cost",
            "nullable": true
          },
          "amenities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsApi_Amenity"
            },
            "description": "Guest preference list",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Room stay details"
      },
      "PmsApi_RoomStayStatus": {
        "enum": [
          "New",
          "CheckedIn",
          "CheckedOut",
          "Cancelled"
        ],
        "type": "string",
        "description": "Room stay status\n New values will not be added (enum is frozen).\n- **New**: New\n- **CheckedIn**: Checked in\n- **CheckedOut**: Checked out\n- **Cancelled**: Cancelled"
      },
      "PmsApi_SavePaymentRequest": {
        "type": "object",
        "properties": {
          "actionDateTime": {
            "type": "string",
            "description": "Action date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-11T14:00"
          },
          "pmsPaymentSystemId": {
            "type": "string",
            "description": "Payment system ID in PMS",
            "nullable": true,
            "example": "0oHjfSIZS0ng=="
          },
          "total": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Total amount",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "Payment comment",
            "nullable": true,
            "example": "Payment for something"
          }
        },
        "additionalProperties": false,
        "description": "Request to process a payment"
      },
      "PmsApi_SetActualCheckInDateTimeRequest": {
        "type": "object",
        "properties": {
          "actualCheckInDateTime": {
            "type": "string",
            "description": "Actual check-in date and time in ISO-8601 YYYY-MM-DDThh:mm format, local time",
            "nullable": true,
            "example": "2024-07-11T14:00"
          }
        },
        "additionalProperties": false,
        "description": "Request to set actual check-in time"
      },
      "PmsApi_SetActualCheckOutDateTimeRequest": {
        "type": "object",
        "properties": {
          "actualCheckOutDateTime": {
            "type": "string",
            "description": "Actual check-out date and time in ISO-8601 YYYY-MM-DDThh:mm format, Local time",
            "nullable": true,
            "example": "2024-07-11T14:00"
          }
        },
        "additionalProperties": false,
        "description": "Request to set actual check-out time"
      },
      "PmsApi_SetGuestBirthAddressRequest": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 code of birth country",
            "nullable": true,
            "example": "ARG"
          }
        },
        "additionalProperties": false,
        "description": "Request to set guest’s country of birth"
      },
      "PmsApi_SetGuestPersonalDocumentRequest": {
        "type": "object",
        "properties": {
          "series": {
            "type": "string",
            "description": "Document series (1–64 alphanumeric)",
            "nullable": true,
            "example": "5000"
          },
          "number": {
            "type": "string",
            "description": "Document number (1–64 alphanumeric)",
            "nullable": true,
            "example": "999999"
          },
          "effectiveDate": {
            "type": "string",
            "description": "Issue date in ISO-8601 YYYY-MM-DD format",
            "nullable": true,
            "example": "2020-11-11"
          },
          "expiryDate": {
            "type": "string",
            "description": "Expiry date in ISO-8601 YYYY-MM-DD format",
            "nullable": true,
            "example": "2040-12-22"
          },
          "departmentCode": {
            "type": "string",
            "description": "Issuing authority subdivision code (max 16 chars)",
            "nullable": true,
            "example": "1234"
          },
          "issueAuthority": {
            "type": "string",
            "description": "Full issuing authority name (max 2048 chars)",
            "nullable": true,
            "example": "Some authority"
          },
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_PersonalDocumentType"
              }
            ],
            "description": "Document type (required parameter)\n New values can be added (enum is not frozen).\n- **ForeignPassport**: International passport\n- **InternationalPassportBiometric**: International passport with biometrics\n- **InternationalPassport**: International passport of a Russian Federation citizen\n- **TemporaryPassport**: Temporary passport\n- **BirthCertificate**: Birth certificate\n- **Diplomatic**: Diplomatic passport of a Russian Federation citizen\n- **BirthCertificateForeign**: Foreign birth certificate\n- **MilitaryOfficer**: Officer ID card\n- **ForeignPassportForeign**: International passport issued outside the Russian Federation\n- **Another**: Another identity document\n- **DiplomaticForeign**: Diplomatic passport of a foreign citizen\n- **TemporaryResidence**: Temporary residence permit for a foreign citizen\n- **Residence**: Residence permit of a foreign citizen\n- **TemporaryRefuge**: Certificate of temporary refuge on the territory of the Russian Federation\n- **Cis**: Identity card of a citizen of CIS member states\n- **WorkPassport**: Service passport\n- **ResidenceStateless**: Residence permit of a stateless person\n- **NationalPassport**: National foreign passport\n- **KazPassport**: Identity card of a citizen of the Republic of Kazakhstan\n- **ResidenceStatelessBiometric**: Residence permit of a stateless person with biometrics\n- **TemporaryResidenceStateless**: Temporary residence permit of a stateless person (stamp)\n- **TemporaryResidenceStatelessBlank**: Temporary residence permit of a stateless person (blank)\n- **Patent**: Patent\n- **DriverLicense**: Driver license\n- **PersonalCard**: Identity card\n- **Passport**: Passport",
            "example": "ForeignPassport"
          }
        },
        "additionalProperties": false,
        "description": "Request to set guest identity document details"
      },
      "PmsApi_SetRoomRequest": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "description": "Room or suite identifier",
            "nullable": true,
            "example": "4503599627373585"
          }
        },
        "additionalProperties": false,
        "description": "Request to assign a room"
      },
      "PmsApi_SetRoomStayRoomRequest": {
        "type": "object",
        "properties": {
          "pmsRoomStayId": {
            "type": "string",
            "description": "Stay identifier in PMS",
            "nullable": true,
            "example": "4503599627373585"
          },
          "roomId": {
            "type": "string",
            "description": "Room or suite identifier",
            "nullable": true,
            "example": "4503599627373522"
          }
        },
        "additionalProperties": false,
        "description": "Request to set room for a stay"
      },
      "PmsApi_TotalPrice": {
        "type": "object",
        "properties": {
          "amount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Total cost of stay, including extra services, early check-in and late check-out. Taxes are not included.",
            "nullable": true
          },
          "payAmount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Amount due for payment",
            "nullable": true
          },
          "refundAmount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PmsApi_Amount"
              }
            ],
            "description": "Amount for a refund",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Aggregated price details"
      },
      "PmsApi_Vat": {
        "required": [
          "applicable",
          "included",
          "percent"
        ],
        "type": "object",
        "properties": {
          "applicable": {
            "type": "boolean",
            "description": "Is VAT applicable?",
            "example": true
          },
          "included": {
            "type": "boolean",
            "description": "Is VAT included in the total price?",
            "example": false
          },
          "percent": {
            "type": "integer",
            "description": "VAT percentage",
            "format": "int32",
            "example": 20
          }
        },
        "additionalProperties": false,
        "description": "VAT details for amounts"
      },
      "PmsApi_VisitPurpose": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Purpose of visit identifier",
            "nullable": true,
            "example": "1"
          },
          "displayName": {
            "type": "string",
            "description": "Localized purpose name",
            "nullable": true,
            "example": "Business"
          }
        },
        "additionalProperties": false,
        "description": "Purpose of visit data"
      },
      "PmsAnalyticsApi_ApiResponse": {
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsAnalyticsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsAnalyticsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Standard API response container with warnings and errors"
      },
      "PmsAnalyticsApi_DailyOccupancy": {
        "required": [
          "arrivalCount",
          "closedRoomCount",
          "complimentaryOccupancyRoomCount",
          "date",
          "guestCount",
          "mealRevenue",
          "occupancyRate",
          "occupancyRoomCount",
          "revenue",
          "roomRevenue"
        ],
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Calendar date for which statistics are reported (ISO-8601 format YYYY-MM-DD).",
            "format": "date",
            "example": "2025-01-15"
          },
          "occupancyRate": {
            "type": "number",
            "description": "Hotel occupancy rate\r\nExpressed as a decimal value between 0.0 and 1.0 (where 1.0 represents 100%).",
            "format": "double",
            "example": 0.85
          },
          "closedRoomCount": {
            "type": "integer",
            "description": "Number of rooms out of service for the date.\r\nIncludes rooms under repair or mothballed.",
            "format": "int32",
            "example": 7
          },
          "occupancyRoomCount": {
            "type": "integer",
            "description": "Total number of occupied rooms for the specified date.\r\nIncludes Revenue Rooms. Not includes Complimentary rooms.",
            "format": "int32",
            "example": 76
          },
          "complimentaryOccupancyRoomCount": {
            "type": "integer",
            "description": "Number of occupied rooms with zero cost of stay (Complimentary).",
            "format": "int32",
            "example": 3
          },
          "roomRevenue": {
            "type": "number",
            "description": "Net Room Revenue.\r\nExcludes VAT, applicable agency commissions, and the value of all add-on services. Bundled components (e.g.,\r\nbreakfast, parking, SPA) must be stripped out of the rate.",
            "format": "double",
            "example": 158000
          },
          "revenue": {
            "type": "number",
            "description": "Daily Gross Hotel Revenue.\r\nCalculated as: Room Revenue + Meal Revenue + revenue from miscellaneous departments (e.g., telephone, laundry, SPA).\r\nReflects the total operational cash flow.",
            "format": "double",
            "example": 195000
          },
          "mealRevenue": {
            "type": "number",
            "format": "double"
          },
          "arrivalCount": {
            "type": "integer",
            "description": "Number of actual check-ins for the given date.",
            "format": "int32",
            "example": 15
          },
          "guestCount": {
            "type": "integer",
            "description": "Total guest count (Adults + Children) staying at the hotel on the reporting date.",
            "format": "int32",
            "example": 120
          }
        },
        "additionalProperties": false,
        "description": "Daily occupancy statistics for a specific stay date"
      },
      "PmsAnalyticsApi_GetDailyOccupancyResponse": {
        "required": [
          "currencyCode",
          "propertyRoomCount"
        ],
        "type": "object",
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsAnalyticsApi_ResponseError"
            },
            "description": "Non-critical issues",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsAnalyticsApi_ResponseError"
            },
            "description": "Errors",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Three-letter currency code (ISO-4217).",
            "nullable": true,
            "example": "RUB"
          },
          "propertyRoomCount": {
            "type": "integer",
            "description": "Total Inventory — the total number of rooms in the hotel according to the building specifications. A constant\r\nvalue that is independent of any repairs.",
            "format": "int32",
            "example": 90
          },
          "dailyOccupancies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsAnalyticsApi_DailyOccupancy"
            },
            "description": "Daily statistics."
          }
        },
        "additionalProperties": false,
        "description": "Daily occupancy statistics for a specific stay date"
      },
      "PmsAnalyticsApi_ResponseError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error or warning code",
            "nullable": true,
            "example": "11"
          },
          "message": {
            "type": "string",
            "description": "Human-readable description of the issue",
            "nullable": true,
            "example": "Incorrect dates format"
          }
        },
        "additionalProperties": false,
        "description": "Error or warning item with code and message"
      },
      "PmsIntegrationApi_BookedNightsCountRs": {
        "type": "object",
        "properties": {
          "stayUnits": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "PmsIntegrationApi_Booking": {
        "required": [
          "bookingChannels",
          "id",
          "propertyId",
          "roomRevenues",
          "roomStays",
          "uniqueIds"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Internal identifier of this booking within PmsIntegrationStorage service.",
            "example": "606541"
          },
          "status": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingStatus"
          },
          "uniqueIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingUniqueId"
            },
            "description": "Identifiers assigned to this booking by external systems (PMS, channel manager, etc.).\r\nUse idContext to distinguish the source system."
          },
          "bookingChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingChannel"
            },
            "description": "Booking channels (agents, companies) associated with this booking."
          },
          "roomStays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingRoomStay"
            },
            "description": "Room stays within this booking."
          },
          "total": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingAmount"
          },
          "guaranteeInfo": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingGuaranteeInfo"
          },
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the property (hotel).",
            "example": "2490"
          },
          "pmsSideUpdateDateTime": {
            "type": "string",
            "description": "Date and time when the booking was updated in the PMS system (not in this storage) in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2024-03-27T16:45:00"
          },
          "pmsSideCreateDateTime": {
            "type": "string",
            "description": "Date and time when the booking was created in the PMS system in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2024-03-20T10:30:00"
          },
          "updateDateTime": {
            "type": "string",
            "description": "Timestamp of the last update of this record in the storage in ISO-8601 yyyy-MM-dd'T'HH:mm:ssZ format (UTC).",
            "format": "date-time",
            "example": "2024-03-27T13:45:00Z"
          },
          "cancellationInfo": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingCancellationInfo"
          },
          "roomRevenues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingRoomRevenue"
            },
            "description": "Daily room revenue breakdown."
          }
        },
        "additionalProperties": false,
        "description": "PMS booking (reservation)."
      },
      "PmsIntegrationApi_BookingAgeQualifyingCode": {
        "enum": [
          "AdultBed",
          "ChildBandBed"
        ],
        "type": "string",
        "description": "Age qualifying code for guest count.\r\nOpen — new values may be added in future versions.",
        "example": "AdultBed"
      },
      "PmsIntegrationApi_BookingAmount": {
        "required": [
          "currencyCode"
        ],
        "type": "object",
        "properties": {
          "amountAfterTax": {
            "type": "number",
            "description": "Total amount after tax. Decimal number with up to 2 fractional digits.",
            "format": "double",
            "example": 15000
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code in ISO-4217 format, e.g., USD, CAD.",
            "example": "USD"
          }
        },
        "additionalProperties": false,
        "description": "Monetary amount with currency."
      },
      "PmsIntegrationApi_BookingCancellationInfo": {
        "type": "object",
        "properties": {
          "pmsSideCancelDateTime": {
            "type": "string",
            "description": "Date and time when the booking was cancelled in the PMS system in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2024-03-25T09:00:00"
          },
          "cancelReason": {
            "type": "string",
            "description": "Reason for cancellation.",
            "nullable": true,
            "example": "Guest request"
          }
        },
        "additionalProperties": false,
        "description": "Cancellation details for a cancelled booking."
      },
      "PmsIntegrationApi_BookingChannel": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Channel code from PMS.",
            "nullable": true,
            "example": "TA001"
          },
          "codeType": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingChannelCodeType"
          },
          "name": {
            "type": "string",
            "description": "Human-readable channel name.",
            "nullable": true,
            "example": "Booking.com"
          },
          "bookingChannelType": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingChannelType"
          }
        },
        "additionalProperties": false,
        "description": "Booking channel — agent or company associated with the booking."
      },
      "PmsIntegrationApi_BookingChannelCodeType": {
        "enum": [
          "Unknown",
          "Pms"
        ],
        "type": "string",
        "description": "Type of booking channel code.\r\nOpen — new values may be added in future versions.",
        "example": "Pms"
      },
      "PmsIntegrationApi_BookingChannelType": {
        "enum": [
          "Unknown",
          "TravelAgent",
          "Company"
        ],
        "type": "string",
        "description": "Type of booking channel.\r\nOpen — new values may be added in future versions.",
        "example": "TravelAgent"
      },
      "PmsIntegrationApi_BookingGuaranteeInfo": {
        "type": "object",
        "properties": {
          "guaranteeCode": {
            "type": "string",
            "description": "Guarantee type code from PMS.",
            "nullable": true,
            "example": "CC"
          }
        },
        "additionalProperties": false,
        "description": "Guarantee information for the booking."
      },
      "PmsIntegrationApi_BookingGuestCount": {
        "type": "object",
        "properties": {
          "ageQualifyingCode": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingAgeQualifyingCode"
          },
          "count": {
            "type": "integer",
            "description": "Number of guests in this age category.",
            "format": "int32",
            "example": 2
          },
          "age": {
            "type": "integer",
            "description": "Age of the guest. Applicable for children, null for adults.",
            "format": "int32",
            "nullable": true,
            "example": 5
          }
        },
        "additionalProperties": false,
        "description": "Guest count by age qualifying category."
      },
      "PmsIntegrationApi_BookingInventoryBlock": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Ordinal index within the parent room stay. Used for cross-referencing by BookingRoomRate.",
            "format": "int32",
            "example": 0
          },
          "pmsSideCode": {
            "type": "string",
            "description": "Inventory block code from PMS.",
            "nullable": true,
            "example": "GRP-2024"
          }
        },
        "additionalProperties": false,
        "description": "Inventory block (allotment) within a room stay."
      },
      "PmsIntegrationApi_BookingRatePlan": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Ordinal index within the parent room stay. Used for cross-referencing by BookingRoomRate.",
            "format": "int32",
            "example": 0
          },
          "pmsSideCode": {
            "type": "string",
            "description": "Rate plan code from PMS.",
            "nullable": true,
            "example": "BAR"
          }
        },
        "additionalProperties": false,
        "description": "Rate plan within a room stay."
      },
      "PmsIntegrationApi_BookingRoomRate": {
        "type": "object",
        "properties": {
          "stayDate": {
            "type": "string",
            "description": "Date of stay for this rate in ISO-8601 yyyy-MM-dd format, property local time.",
            "format": "date",
            "example": "2024-03-28"
          },
          "roomTypeIndex": {
            "type": "integer",
            "description": "References BookingRoomStay.RoomTypes element by its Index.",
            "format": "int32",
            "example": 0
          },
          "ratePlanIndex": {
            "type": "integer",
            "description": "References BookingRoomStay.RatePlans element by its Index.",
            "format": "int32",
            "example": 0
          },
          "inventoryBlockIndex": {
            "type": "integer",
            "description": "References BookingRoomStay.InventoryBlocks element by its Index. Null if no inventory block.",
            "format": "int32",
            "nullable": true
          },
          "total": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingAmount"
          }
        },
        "additionalProperties": false,
        "description": "Daily rate for a specific room type and rate plan combination."
      },
      "PmsIntegrationApi_BookingRoomRevenue": {
        "type": "object",
        "properties": {
          "stayDate": {
            "type": "string",
            "description": "Date of stay in ISO-8601 yyyy-MM-dd format, property local time.",
            "format": "date",
            "example": "2024-03-28"
          },
          "amount": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingAmount"
          }
        },
        "additionalProperties": false,
        "description": "Daily revenue for a room stay date."
      },
      "PmsIntegrationApi_BookingRoomShare": {
        "required": [
          "roomShareCode"
        ],
        "type": "object",
        "properties": {
          "roomShareCode": {
            "minLength": 1,
            "type": "string",
            "description": "PMS-side identifier of the room-share group.",
            "example": "30014"
          },
          "isPrimaryRoomShare": {
            "type": "boolean",
            "description": "True if this booking is the primary booking in the room-share group.",
            "example": true
          }
        },
        "additionalProperties": false,
        "description": "Shared-room information when the booking is part of a room-share group in the PMS.\r\nMultiple bookings sharing the same physical room have the same RoomShareCode."
      },
      "PmsIntegrationApi_BookingRoomStay": {
        "required": [
          "guestCounts",
          "inventoryBlocks",
          "ratePlans",
          "roomRates",
          "roomTypes",
          "services"
        ],
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Ordinal number of this room stay within the booking.",
            "format": "int32",
            "example": 1
          },
          "sourceOfBusiness": {
            "type": "string",
            "description": "Source of business / marketing source code from PMS.",
            "nullable": true,
            "example": "WEB"
          },
          "marketCode": {
            "type": "string",
            "description": "Market segment code from PMS.",
            "nullable": true,
            "example": "LEISURE"
          },
          "roomTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingRoomType"
            },
            "description": "Room types associated with this stay."
          },
          "ratePlans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingRatePlan"
            },
            "description": "Rate plans associated with this stay."
          },
          "inventoryBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingInventoryBlock"
            },
            "description": "Inventory blocks (allotments) associated with this stay."
          },
          "roomRates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingRoomRate"
            },
            "description": "Daily rate breakdown for this stay."
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingService"
            },
            "description": "Additional services (extras) attached to this stay."
          },
          "guestCounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_BookingGuestCount"
            },
            "description": "Guest count breakdown by age category."
          },
          "stayDates": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingStayDates"
          },
          "roomShare": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingRoomShare"
          }
        },
        "additionalProperties": false,
        "description": "A single room stay within a booking."
      },
      "PmsIntegrationApi_BookingRoomType": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "description": "Ordinal index within the parent room stay. Used for cross-referencing by BookingRoomRate.",
            "format": "int32",
            "example": 0
          },
          "pmsSideCode": {
            "type": "string",
            "description": "Room type code from PMS.",
            "nullable": true,
            "example": "STD"
          },
          "pmsSideRoomNumber": {
            "type": "string",
            "description": "Physical room number/identifier assigned in PMS (e.g. \"301\", \"0406\"). Null if not available.",
            "nullable": true,
            "example": "301"
          }
        },
        "additionalProperties": false,
        "description": "Room type within a room stay."
      },
      "PmsIntegrationApi_BookingRs": {
        "type": "object",
        "properties": {
          "booking": {
            "$ref": "#/components/schemas/PmsIntegrationApi_Booking"
          }
        },
        "additionalProperties": false,
        "description": "Response containing booking data."
      },
      "PmsIntegrationApi_BookingService": {
        "type": "object",
        "properties": {
          "quantity": {
            "type": "integer",
            "description": "Quantity of the service.",
            "format": "int32",
            "example": 1
          },
          "pmsSideCode": {
            "type": "string",
            "description": "Service code from PMS.",
            "nullable": true,
            "example": "BRKF"
          },
          "name": {
            "type": "string",
            "description": "Human-readable service name.",
            "nullable": true,
            "example": "Breakfast"
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the service in ISO-8601 yyyy-MM-dd, property local time.",
            "format": "date",
            "example": "2024-03-27"
          },
          "durationStayUnits": {
            "type": "integer",
            "description": "Service duration in stay units.",
            "format": "int32",
            "example": 3
          },
          "total": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingAmount"
          },
          "inclusive": {
            "type": "boolean",
            "description": "Whether the service is included in the room rate.",
            "example": true
          }
        },
        "additionalProperties": false,
        "description": "Additional service (extra) attached to a room stay."
      },
      "PmsIntegrationApi_BookingStatus": {
        "enum": [
          "Unknown",
          "Confirmed",
          "Waitlisted",
          "InHouse",
          "CheckedOut",
          "Cancelled"
        ],
        "type": "string",
        "description": "Booking status.\r\nOpen — new values may be added in future versions.",
        "example": "Confirmed"
      },
      "PmsIntegrationApi_BookingStayDates": {
        "type": "object",
        "properties": {
          "arrivalDateTime": {
            "type": "string",
            "description": "Arrival date and time in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2024-03-27T14:00:00"
          },
          "departureDateTime": {
            "type": "string",
            "description": "Departure date and time in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2024-03-30T12:00:00"
          },
          "actualCheckInDateTime": {
            "type": "string",
            "description": "Actual check-in date and time in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone). Null if not yet checked in.",
            "format": "date-time",
            "nullable": true,
            "example": "2024-03-27T14:15:00"
          },
          "actualCheckOutDateTime": {
            "type": "string",
            "description": "Actual check-out date and time in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone). Null if not yet checked out.",
            "format": "date-time",
            "nullable": true,
            "example": "2024-03-30T11:30:00"
          }
        },
        "additionalProperties": false,
        "description": "Arrival and departure dates for a room stay."
      },
      "PmsIntegrationApi_BookingUniqueId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identifier value.",
            "nullable": true,
            "example": "RES-12345"
          },
          "idContext": {
            "$ref": "#/components/schemas/PmsIntegrationApi_BookingUniqueIdContext"
          }
        },
        "additionalProperties": false,
        "description": "Unique identifier of the booking in an external system."
      },
      "PmsIntegrationApi_BookingUniqueIdContext": {
        "enum": [
          "Unknown",
          "Pms",
          "Internal",
          "External"
        ],
        "type": "string",
        "description": "Context identifying the source system of a booking unique identifier.\r\nOpen — new values may be added in future versions.",
        "example": "Pms"
      },
      "PmsIntegrationApi_DailyInventoryBlock": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date of the inventory block allocation in ISO-8601 yyyy-MM-dd format, property local time.",
            "format": "date",
            "example": "2026-03-15"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "Room type code in the PMS system.",
            "nullable": true,
            "example": "DBL"
          },
          "blockedCount": {
            "type": "integer",
            "description": "Number of rooms blocked (allocated) for this date.",
            "format": "int32",
            "example": 10
          },
          "realizedCount": {
            "type": "integer",
            "description": "Number of rooms realized from the block for this date. Null if not tracked.",
            "format": "int32",
            "nullable": true,
            "example": 3
          },
          "cutoffDate": {
            "type": "string",
            "description": "Cutoff date after which unsold rooms are released in ISO-8601 yyyy-MM-dd format, property local time. Null if not set.",
            "format": "date",
            "nullable": true
          },
          "pricing": {
            "$ref": "#/components/schemas/PmsIntegrationApi_DailyInventoryBlockPricing"
          }
        },
        "additionalProperties": false,
        "description": "Daily breakdown item of an inventory block."
      },
      "PmsIntegrationApi_DailyInventoryBlockPricing": {
        "required": [
          "currencyCode"
        ],
        "type": "object",
        "properties": {
          "oneAdultPrice": {
            "type": "number",
            "description": "Price per room for one adult.",
            "format": "double",
            "nullable": true,
            "example": 5500
          },
          "servicesPrice": {
            "type": "number",
            "description": "Total price of additional services per room.",
            "format": "double",
            "nullable": true,
            "example": 1200
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code in ISO-4217 format, e.g., USD, EUR.",
            "example": "USD"
          }
        },
        "additionalProperties": false,
        "description": "Pricing information for a daily inventory block item."
      },
      "PmsIntegrationApi_DailyRoomTypeInventory": {
        "type": "object",
        "properties": {
          "roomTypeCode": {
            "type": "string",
            "description": "Room type code in the PMS system.",
            "nullable": true,
            "example": "DBL"
          },
          "date": {
            "type": "string",
            "description": "Date of the inventory record in ISO-8601 yyyy-MM-dd format, property local time.",
            "format": "date",
            "example": "2026-03-15"
          },
          "physicalRoomCount": {
            "type": "integer",
            "description": "Total number of physical rooms of this type.",
            "format": "int32",
            "example": 50
          },
          "availableRoomCount": {
            "type": "integer",
            "description": "Number of rooms available for booking.",
            "format": "int32",
            "example": 25
          },
          "outOfOrderRoomCount": {
            "type": "integer",
            "description": "Number of rooms out of order (not available for booking due to maintenance, etc.).",
            "format": "int32",
            "example": 2
          },
          "updateDateTime": {
            "type": "string",
            "description": "Timestamp of the last update of this record in the storage in ISO-8601 yyyy-MM-dd'T'HH:mm:ssZ format (UTC).",
            "format": "date-time",
            "example": "2026-03-15T14:30:00Z"
          }
        },
        "additionalProperties": false,
        "description": "Daily inventory data for a specific room type."
      },
      "PmsIntegrationApi_Error": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code.",
            "nullable": true,
            "example": "INVALID_PROPERTY_ID"
          },
          "message": {
            "type": "string",
            "description": "Human-readable error description.",
            "nullable": true,
            "example": "Invalid propertyId"
          }
        },
        "additionalProperties": false,
        "description": "Error details."
      },
      "PmsIntegrationApi_ErrorRs": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_Error"
            },
            "description": "List of errors.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Error response."
      },
      "PmsIntegrationApi_InventoryBlock": {
        "required": [
          "dailyItems",
          "id",
          "propertyId",
          "ratePlanCodes"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Internal identifier of this inventory block within PmsIntegrationStorage service.",
            "example": "12345"
          },
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the property (hotel).",
            "example": "2490"
          },
          "pmsSideId": {
            "type": "string",
            "description": "Identifier of this block on the PMS side.",
            "nullable": true,
            "example": "BLK-001"
          },
          "pmsSideCode": {
            "type": "string",
            "description": "Code of this block on the PMS side. Null if not available.",
            "nullable": true,
            "example": "QUOTA-2024"
          },
          "updateDateTime": {
            "type": "string",
            "description": "Timestamp of the last update of this record in the storage in ISO-8601 yyyy-MM-dd'T'HH:mm:ssZ format (UTC).",
            "format": "date-time",
            "example": "2026-03-15T14:30:00Z"
          },
          "pmsSideCreateDateTime": {
            "type": "string",
            "description": "Date and time when the block was created in the PMS system in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone).",
            "format": "date-time",
            "example": "2026-02-15T10:00:00"
          },
          "pmsSideCancelDateTime": {
            "type": "string",
            "description": "Date and time of block cancellation in the PMS system in ISO-8601 yyyy-MM-dd'T'HH:mm:ss format, property local time (no timezone). Null if not cancelled.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-03-20T08:00:00"
          },
          "ratePlanCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Rate plan codes associated with this block."
          },
          "blockStatus": {
            "$ref": "#/components/schemas/PmsIntegrationApi_InventoryBlockStatus"
          },
          "pmsBlockStatus": {
            "type": "string",
            "description": "Raw block status code as received from the PMS (e.g. \"DEF\", \"ACT\", \"INQ\", \"CAN\"). Null if not provided.",
            "nullable": true,
            "example": "DEF"
          },
          "dailyItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_DailyInventoryBlock"
            },
            "description": "Daily breakdown of the inventory block."
          }
        },
        "additionalProperties": false,
        "description": "Inventory block (quota block) data."
      },
      "PmsIntegrationApi_InventoryBlockRs": {
        "type": "object",
        "properties": {
          "inventoryBlock": {
            "$ref": "#/components/schemas/PmsIntegrationApi_InventoryBlock"
          }
        },
        "additionalProperties": false,
        "description": "Response containing inventory block data."
      },
      "PmsIntegrationApi_InventoryBlockStatus": {
        "enum": [
          "Unknown",
          "Inquiry",
          "Active",
          "Cancelled"
        ],
        "type": "string",
        "description": "Status of an inventory block.\r\nOpen — new values may be added in future versions.",
        "example": "Inquiry"
      },
      "PmsIntegrationApi_SearchInventoryRequest": {
        "required": [
          "endDate",
          "roomTypeCodes",
          "startDate"
        ],
        "type": "object",
        "properties": {
          "roomTypeCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Room type codes to filter by (PMS codes).",
            "example": [
              "DBL",
              "SGL"
            ]
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the search range (inclusive) in ISO-8601 yyyy-MM-dd format, property local time. Maximum date range is 2 years.",
            "format": "date",
            "example": "2026-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the search range (inclusive) in ISO-8601 yyyy-MM-dd format, property local time. Maximum date range is 2 years.",
            "format": "date",
            "example": "2026-12-31"
          }
        },
        "additionalProperties": false,
        "description": "Search filters for inventory query."
      },
      "PmsIntegrationApi_SearchInventoryResult": {
        "required": [
          "inventories",
          "propertyId"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the property (hotel).",
            "example": "2490"
          },
          "inventories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PmsIntegrationApi_DailyRoomTypeInventory"
            },
            "description": "Daily room type inventory records matching the search criteria."
          }
        },
        "additionalProperties": false,
        "description": "Inventory search result containing property inventory data."
      },
      "PmsIntegrationApi_SearchInventoryRs": {
        "type": "object",
        "properties": {
          "inventory": {
            "$ref": "#/components/schemas/PmsIntegrationApi_SearchInventoryResult"
          }
        },
        "additionalProperties": false,
        "description": "Response containing inventory search results."
      }
    },
    "parameters": {},
    "responses": {},
    "requestBodies": {},
    "headers": {},
    "securitySchemes": {
      "ContentApi_ApiKey": {
        "type": "apiKey",
        "name": "X-API-KEY",
        "in": "header"
      },
      "ContentApi_oAuth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://partner.tlintegration.com/auth/token",
            "scopes": {}
          }
        }
      },
      "ReferenceDataApi_ApiKey": {
        "type": "apiKey",
        "name": "X-API-KEY",
        "in": "header"
      },
      "ReferenceDataApi_oAuth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://partner.tlintegration.com/auth/token",
            "scopes": {}
          }
        }
      },
      "ReservationApi_oauth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://partner.tlintegration.com/auth/token",
            "scopes": {}
          }
        }
      },
      "SearchApi_ApiKey": {
        "type": "apiKey",
        "name": "X-API-KEY",
        "in": "header"
      },
      "SearchApi_oAuth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://partner.tlintegration.com/auth/token",
            "scopes": {}
          }
        }
      },
      "PmsApi_Bearer": {
        "type": "http",
        "description": "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "PmsAnalyticsApi_Bearer": {
        "type": "http",
        "description": "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "PmsIntegrationApi_oAuth2": {
        "type": "oauth2",
        "description": "Put Client credentials",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://partner.tlintegration.com/auth/token",
            "scopes": {}
          }
        }
      },
      "PmsIntegrationApi_Bearer": {
        "type": "http",
        "description": "Put JWT Bearer token",
        "scheme": "Bearer",
        "bearerFormat": "JWT"
      },
      "Reviews_Bearer": {
        "type": "apiKey",
        "description": "Enter your JWT with the 'Bearer ' prefix",
        "name": "Authorization",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "Авторизация",
      "description": "## Перед началом работы\n\nДля работы с API необходим токен доступа (`access_token`). Токен выдается на основании учетных данных `client_id` и `client_secret`. Получить их можно одним из следующих способов.\n\n**Подключение через средство размещения**\n\nОтельер создает API-подключение в личном кабинете TravelLine и передает вам учетные данные `client_id` и `client_secret`. Подробнее см. в разделе [Подключение через средство размещения](/dev-portal/docs/connect/hotel).\n\n**Прямое подключение партнера**\n\nЕсли вы прямой партнер TravelLine, запросите доступ к тестовой среде и учетные данные `client_id` и `client_secret` у TravelLine. Подробнее см. в разделе [Прямое подключение партнера](/dev-portal/docs/connect/partner).\n\nПосле получения учетных данных отправьте запрос на конечную точку авторизации. В ответе вы получите токен доступа (`access_token`) для работы с API.\n\nПередавайте значение `access_token` в каждом запросе к API в заголовке `Authorization`:\n\n```http\nAuthorization: Bearer <access_token>\n```\n\nАвторизация происходит через [OAuth2.0](https://oauth.net/2/).\n\nOAuth 2.0 – это стандарт авторизации, который позволяет приложениям получать доступ к данным.\n\nДля работы с API в запросах необходимо передавать ключ доступа в формате JSON Web Token (JWT).\n\nJWT (JSON Web Token) — это специальный формат токена, который позволяет безопасно передавать данные между клиентом и сервером.\n\nПолучение JWT происходит через **Client credentials flow**, то есть авторизацию по секретному ключу доступа. Для запроса ключа доступа необходимы следующие параметры:\n\n- **client_id**,\n- **client_secret**.\n\n## Диаграмма взаимодействия\n\n![alt text](/dev-portal/img/auth-token.png)\n\nTravelLine. Сервер авторизации: https://partner.tlintegration.com/auth/token\n\n## Токен доступа\n\n### Лимиты на авторизацию\n\n- 3 запроса в секунду,\n- 15 запросов в минуту,\n- 300 запросов в час с одного IP-адреса.\n\n### Время жизни токена\n\nТокен доступа действует 15 минут.\n\nОбновление токена не поддерживается. После истечения срока действия запросите новый токен через конечную точку авторизации.\n\n### Конечная точка авторизации\n\n- **Рабочая среда**: [https://partner.tlintegration.com/auth/token](https://partner.tlintegration.com/auth/token)\n\nПример токена доступа:\n\n```plaintext\neyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI2OGZjOHRNUGFSUHRyRHYtVHV2WEpncUNGTE1CVGRheTBpQkdJSUE3amxvIn0.eyJleHAiOjE2OTg5MTYwMzYsImlhdCI6MTY5ODkxNTEzNiwianRpIjoiYTJjZGJhMGQtYzQwNy00OWRmLThiNGQtOTJhNTM1NWQxYTFmIiwiaXNzIjoiaHR0cHM6Ly9wYXJ0bmVyLnRsaW50ZWdyYXRpb24uY29tL2F1dGgvcmVhbG1zL1BhcnRuZXJBcGkiLCJhdWQiOiJUcmF2ZWxMaW5lLlBhcnRuZXJBUEkiLCJzdWIiOiI4NmE0YjZiZS0wYTc0LTRjYjktYjNhYi1iNDYyZWUwYmIyYmQiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJwYTMiLCJzY29wZSI6IiIsImFwaV9hY2Nlc3NlcyI6WyJjb250ZW50Il19.Nz6dyaHGyIN5IKv30oM-HrqdQBqaGdzEFrk7ACUWbfvsNCHNowg96iJrGwQbkOUSVPtQJF9Cwf1_jywP6c2UPHclzBIDp9HTsYdVM5QS_k9ecs0GCiI8ACBqld3yatY4dJz3MRkxnU_rp0NbJJQ-uBcmg_9UCSCIc3mKR7UAosr5XOXeb4ckrFd67DK5xfofT0ykE46Qkc6nvev3AGx11fPAVsFnmmPOSnlpQzJTI7XBWbD120q5fDdksVlaiq3YoBueDEeOPFH08Ia6xdTVjIf_zsyOEKt2N8_7BTyWG_3YPThBbgn-eAgybSdeop6_eCrWTfQvX5g8qtR2e9J32A\n```\n\nНа сайте [JWT.IO](https://jwt.io/) можно расшифровать токен доступа.\n\n### Пример расшифрованного токена\n\n**Содержимое запроса:**\n\n```json\n{\n  \"exp\": 1698916036,\n  \"iat\": 1698915136,\n  \"jti\": \"a2cdba0d-c407-49df-8b4d-92a5355d1a1f\",\n  \"iss\": \"https://partner.tlintegration.com/auth/realms/PartnerApi\",\n  \"aud\": \"TravelLine.PartnerAPI\",\n  \"sub\": \"86a4b6be-0a74-4cb9-b3ab-b462ee0bb2bd\",\n  \"typ\": \"Bearer\",\n  \"azp\": \"pa3\",\n  \"scope\": \"\",\n  \"api_accesses\": [\n    \"content\"\n  ]\n}\n```\n\n**Обратите внимание**. Токен обновления не используется.\n\n## Рекомендации\n\n1. **Кешируйте на стороне клиента токен доступа** и используйте его повторно в своих запросах.\n\n2. **Используйте библиотеки для OAuth2.0:**\n\n   - **.NET:**  \n     [IdentityModel](https://identitymodel.readthedocs.io/en/latest/client/overview.html)  \n     `Microsoft.Extensions.DependencyInjection`\n\n   - **JavaScript:**  \n     [oidc-client](https://www.npmjs.com/package/oidc-client?activeTab=readme)  \n     [oidc-client-js Wiki](https://github.com/IdentityModel/oidc-client-js/wiki)\n\n   - **PHP:**  \n     [OpenID-Connect-PHP](https://github.com/jumbojett/OpenID-Connect-PHP)\n\n   - **cURL:**  \n     ```bash\n     curl -L -X POST \"https://partner.tlintegration.com/auth/token\" \\\n     -H \"Content-Type: application/x-www-form-urlencoded\" \\\n     -d \"grant_type=client_credentials\" \\\n     -d \"client_id=XXXXXXXXXXXX\" \\\n     -d \"client_secret=XXXXXXXXXXXX\"\n     ```"
    },
    {
      "name": "Лимиты",
      "description": "Чтобы обеспечить стабильную работу сервиса, мы ввели ограничения на количество запросов к API со стороны пользователей. Если лимит превышен, API вернет ошибку `429 Too Many Requests`, а запрос не будет обработан.\n\nЕсли не указано иное, ограничения применяются отдельно к каждому клиенту API. Все запросы, выполняемые от имени одного клиента, учитываются в рамках общего лимита независимо от IP-адреса и количества используемых токенов доступа.\n\nЛимиты определяют максимальное количество запросов, которое можно выполнить за секунду, минуту или час. При обработке каждого нового запроса учитывается количество запросов, выполненных за соответствующий период непосредственно перед его отправкой. Например, если установлен лимит `50 в секунду`, то 51-й запрос, отправленный в течение той же секунды, будет отклонен. Выполнение запросов станет доступно снова, как только количество запросов за последнюю секунду окажется ниже установленного лимита. Аналогично работают ограничения за минуту и час.\n\n| API | Описание | Лимиты |\n|-----|----------|--------|\n| API со стандартными лимитами | Все методы API, для которых не заданы отдельные ограничения | 50 запросов в секунду, 200 в минуту, 3000 в час |\n| PMS Integration Storage API | Все методы API | 50 запросов в секунду, 1200 в минуту, 30000 в час |\n| Public Reviews API | Все методы API с одного IP-адреса | 50 запросов в секунду, 1200 в минуту, 30000 в час |\n| Read Reservation API | Получение списка бронирований | 3 запроса в секунду, 100 в минуту, 3000 в час |\n| Read Reservation API | Получение информации о бронировании | 10 запросов в секунду, 200 в минуту, 4000 в час |\n| Search API | Поиск вариантов размещения по минимальной цене | 3 запроса в секунду, 20 в минуту, 900 в час |\n| Search API | Получение вариантов размещения | 50 запросов в секунду, 200 в минуту, 1000 в час |\n| Search API | Получение вариантов размещения с дополнительными услугами, ранним заездом или поздним выездом | 10 запросов в секунду, 50 в минуту, 500 в час |\n| Search API | Получение дополнительных услуг, раннего заезда или позднего выезда | 10 запросов в секунду, 100 в минуту, 1000 в час |\n\n## Мониторинг лимитов через заголовки\n\nВ каждом ответе API возвращаются заголовки, которые помогут вам отслеживать оставшееся количество запросов:\n\n- `x-ratelimit-remaining-hour` - количество оставшихся запросов в течение часа с момента отправки.\n- `x-ratelimit-remaining-minute` - количество оставшихся запросов в течение минуты с момента отправки.\n- `x-ratelimit-remaining-second` - количество оставшихся запросов в течение секунды с момента отправки.\n- `retry-after` - этот заголовок возвращается при ошибке `429 Too Many Requests` и указывает время (в секундах), через которое можно повторить запрос."
    },
    {
      "name": "Коды ошибок",
      "description": "| Код ошибки | Сообщение           | Описание                                                                                       |\n|------------|---------------------|-----------------------------------------------------------------------------------------------|\n| 400        | Bad Request         | В содержании запроса есть ошибка — например, отсутствуют обязательные заголовки или значения параметров некорректны. |\n| 401        | Unauthorized        | Ошибка может возникать по разным причинам: В запросе не указан OAuth-токен. Или указан, но не там. Закончился срок действия токена — в этом случае получите новый. |\n| 403        | Forbidden           | У пользователя нет доступа к определенным методам API.                                         |\n| 404        | Not Found           | Запрашиваемый ресурс не существует или устарел. Проверьте адрес запроса.                       |\n| 429        | Too Many Requests   | Превышен лимит запросов в секунду (RPS). Убедитесь, что не отправляете лишнего.                |\n| 500        | Internal Server Error | Внутренняя ошибка сервера. Попробуйте зайти позже.                                           |\n| 503        | Service Unavailable | Сервер перегружен. Попробуйте зайти позже.                                                    |"
    },
    {
      "name": "ContentApi",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Content%20API%20V1)\n\nContent API позволяет получить фотографии и описание средства размещения, категорий номеров, тарифов, услуг, удобств.\nЭта информация отображается в модуле бронирования *TL: Booking Engine* на официальном сайте средства размещения.\n\n1. Общие настройки, описание и фото средства размещения.\n1. `services` - все услуги, включая питание.\n1. `ratePlans` - тарифы.\n1. `roomTypes` - категории номеров.\n1. `amenities` - удобства.\n1. Отсутствуюшие в личном кабинете настройки:\n   - `currency` - валюта, определяется страной.\n   - `timeZone` - часовой пояс, определяется городом.\n   - `stayUnitKind` - модель продажи номеров в модуле бронирования (`NightRate` или `DailyRate`), определяется типом средства размещения.\n   - `multiLocationProperty` - позволяет иметь разные адреса для категорий номеров, можно включить по запросу в техподдержку TravelLine.\n\nКроме того, API предоставляет справочники вариантов выбора для настроек:\n\nЧасть общих справочных данных, например способы оплаты и типы средств размещения, доступна через отдельный Reference Data API.\n\n1. `meal-plans` - типы питания, например:\n     - код `EnglishBreakfast` имя `Английский завтрак`.\n     - код `FullBoard` имя `Полный пансион`.\n1. `room-type-categories` - типы предложений, например:\n     - код `Apartments` имя `Апартаменты`.\n     - код `PlaceInRoom` имя `Место в номере`.\n     - код `SmallHouse` имя `Домик`.\n1. `room-amenity-categories` - оснащение номеров, например:\n     - группа `Интернет/телефония` код `wifi_internet` имя `Wi-Fi-интернет`.\n     - группа `Мебель` код `journal_table` имя `журнальный столик`.\n\n### Услуги\n\nВид услуги можно определить по значению поля `kind`:\n\n- `Common` - любые услуги, кроме питания.\n- `Meal` - услуги питания.\n\nДля услуг питания дополнительно заданы поля `mealPlanCode` и `mealPlanName`,\nзаполненные значениями из справочника типов питания.\n\n### Тарифы\n\nТарифы связаны с другими подразделами API:\n\n- поле `extraStayRuleId` указывает на правило раннего заезда и позднего выезда (см. [ExtraStayRules](#tag/ExtraStayRules)).\n- поле `cancellationRuleId` указывает на правило отмены бронирования (см. [CancellationRules](#tag/CancellationRules)).\n\n### Категории номеров\n\nКатегории номеров связаны со справочниками:\n\n- поля `categoryCode` и `categoryName` - тип предложения.\n- элементы массива `amenities` (`code` и `name`) - оснащение номеров.\n\n### Удобства\n\nСписок доступных удобств средства размещения:\n\n- `code` - идентификатор.\n- `displayName` - название для отображения.\n- `chargeType` - тип оплаты:\n    - *free* - бесплатная услуга.\n    - *сhargeable* - платная услуга.\n    - *none* - тип оплаты не применим (услуга не подразумевает оплаты, например: консьерж).\n\nУдобства с идентификаторами `swimming_pool` и `restaurant` могут дублироваться поскольку их может быть несколько в рамках одного средства размещения."
    },
    {
      "name": "CancellationRules",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Content%20API%20V1)\n\nПравила отмены бронирования устанавливаются средством размещения для определения срока,\nв течение которого возможна бесплатная отмена, а также штрафа за позднюю отмену.\nЭти правила применяются к выбранным тарифам через их свойство `cancellationRuleId`.\n\nПравило может начать действовать с одного из следующих моментов времени:\n\n- **ProviderArrivalTime**: Стандартное время заезда. Например, если время заезда в средство размещения\n  установлено на 14:00, бесплатная отмена будет доступна до 14:00 дня, предшествующего дню заезда.\n\n- **ProviderDepartureTime**: Стандартное время выезда. Отсчет начинается с момента выезда в день прибытия.\n  Например, если время выезда в средстве размещения установлено на 12:00, бесплатная отмена будет доступна до\n  12:00 дня, предшествующего дню заезда.\n\n- **GuestArrivalTime**: Время заезда, которое указал гость во время бронирования. Например, если стандартное\n  время заезда — 14:00, но гость выбрал заезд в 16:00, бесплатная отмена будет доступна до 16:00 дня,\n  предшествующего дню заезда. Если гостю не разрешено выбирать время заезда, будет использовано стандартное\n  время, которое принято в средстве размещения.\n\n- **CustomArrivalTime**: Выбранное время, с которого начинается отсчет для правила отмены. Время указывается в\n  поле `referencePointTime` с использованием часового пояса средства размещения.\n\n- **BookingCreationTime**: Время (но не дата), когда гость сделал бронирование. Например, если время заезда\n  установлено на 14:00, а гость забронировал номер в 9:00, бесплатная отмена будет доступна до 9:00 дня,\n  предшествующего дню заезда.\n\n### Штраф за определенный период\n\nШтраф устанавливается с использованием временных рамок, которые включают в себя единицы времени и период до контрольной точки.\n\n- **Единицы времени**:\n  - `None`: Не указано, используется только с периодом `NoMatter`.\n  - `Day`: Дни.\n  - `Hour`: Часы.\n\n- **Период до контрольной точки**:\n  - `NoMatter`: Не зависит от конкретного времени.\n  - `AtLeast`: Больше или равно значению `beforeArrivalValue`.\n  - `NoMoreThan`: Меньше или равно значения `beforeArrivalValue`.\n  - `Between`: В пределах интервала от `beforeArrivalValue` до `beforeArrivalValueMax`.\n\n### Режимы расчета штрафов\n\n- `NoPenalty`: Штраф не применяется.\n- `FirstNightPercent`: Штраф составляет указанный процент от стоимости первой ночи.\n- `PrepaymentPercent`: Штраф составляет указанный процент от суммы предоплаты.\n- `FirstNights`: Штраф равен полной стоимости первых N ночей.\n\nШтраф для выбранного режима расчета указывается в виде числового значения и валюты.\n\nПериод действия правила можно установить, выбрав даты прибытия в часовом поясе гостиницы.\nПериод включает в себя как начальную, так и конечную дату. Если дата окончания не указана,\nона может быть установлена как «Не ограничено», что соответствует `isEndless = true`.\n\nЕсли в правиле нет условий отмены, отмена осуществляется бесплатно.\n\n### Конечная точка\n\n```\nGET /v1/properties/{propertyId}/cancellation-rules\n```\n\nПолучение правил отмены бронирования.\n\n**Параметры:**\n\n- `propertyId` *(string, path)*: ID средства размещения.\n\n**Пример:**\n\n```json\nGET /v1/properties/7291/cancellation-rules\n\n{\n  \"cancellationRules\": [\n    {\n      \"id\": \"556875\",\n      \"propertyId\": \"7291\",\n      \"referencePointKind\": \"CustomArrivalTime\",\n      \"referencePointTime\": \"10:57\",\n      \"cancellationTerms\": [\n        {\n          \"beforeArrivalMatching\": \"Between\",\n          \"beforeArrivalUnit\": \"Day\",\n          \"beforeArrivalValue\": 1,\n          \"beforeArrivalValueMax\": 3,\n          \"penaltyCalculationMethod\": \"PrepaymentPercent\",\n          \"penaltyValue\": 10,\n          \"penaltyValueCurrency\": \"EUR\",\n          \"arrivalDates\": [\n            {\n              \"startDate\": \"2024-07-11\",\n              \"endDate\": \"2024-07-11\",\n              \"isEndless\": true\n            }\n          ]\n        },\n        {\n          \"beforeArrivalMatching\": \"NoMoreThan\",\n          \"beforeArrivalUnit\": \"Hour\",\n          \"beforeArrivalValue\": 24,\n          \"penaltyCalculationMethod\": \"PrepaymentPercent\",\n          \"penaltyValue\": 100,\n          \"penaltyValueCurrency\": \"EUR\",\n          \"arrivalDates\": [\n            {\n              \"startDate\": \"2021-02-09\",\n              \"endDate\": \"2021-02-09\",\n              \"isEndless\": true\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n```"
    },
    {
      "name": "ExtraStayRules",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Content%20API%20V1)\n\nПравила позволяют устанавливать доплату за ранний заезд и поздний выезд.\nЭти правила применяются к выбранным тарифам через их свойство `extraStayRuleId`.\n\nНастройка «Заезд и выезд» задает стандартное время заезда и выезда, которое не требует дополнительной платы.\n\nЭти правила дают возможность назначать доплату за определенные временные промежутки между временем\nраннего заезда или позднего выезда и стандартным временем заезда/выезда.\n\n### Способы расчета доплаты\n\n- `Free`: без дополнительной платы.\n- `Fixed`: установленная сумма.\n- `Percent`: процент от стоимости за ночь.\n- `HourlyRate`: фиксированная ставка за час.\n- `HourlyRateAutoCalculated`: цена за час рассчитывается автоматически.\n- `Forbidden`: ранний заезд/поздний выезд не допускается.\n\n`Fixed` и `HourlyRate` позволяют устанавливать несколько тарифов (rates) в разных валютах.\n\n`Percent` позволяет задать процент доплаты и дополнительные параметры:\n\n- `extraPlacementEnabled`: `'true'`, если взимается доплата за дополнительного гостя; `'false'`, если доплата не взимается.\n- `extraServiceOption`: дополнительные услуги, за которые взимается доплата `[None, All, MealOnly]`.\n\nСвойство `OccupyQuota` указывает, гарантирована ли доступность номера для дополнительного пребывания.\n\n- `true`: доступность номера гарантирована.\n- `false`: доступность номера не гарантируется, даже если дополнительное пребывание оплачено заранее.\n\n### Конечная точка\n\n```\nGET /v1/properties/{propertyId}/extra-stay-rules\n```\n\nПолучение правил раннего заезда и позднего выезда.\n\n**Параметры:**\n\n- `propertyId` *(string, path)*: ID средства размещения.\n\n**Пример:**\n\n```json\nGET /v1/properties/7291/extra-stay-rules\n\n{\n  \"extraStayRules\": [\n    {\n      \"id\": \"519845\",\n      \"propertyId\": \"7291\",\n      \"checkInTime\": \"13:00\",\n      \"overridesPropertyCheckInTime\": false,\n      \"earlyCheckInPeriods\": [\n        {\n          \"startTime\": \"00:00\",\n          \"endTime\": \"09:00\",\n          \"chargeType\": \"Forbidden\",\n          \"rates\": [],\n          \"occupyQuota\": false\n        },\n        {\n          \"startTime\": \"09:00\",\n          \"endTime\": \"13:00\",\n          \"chargeType\": \"Percent\",\n          \"rates\": [],\n          \"percentOptions\": {\n            \"percentage\": 0,\n            \"extraPlacementEnabled\": false,\n            \"extraServiceOption\": \"MealOnly\"\n          },\n          \"occupyQuota\": false\n        }\n      ],\n      \"checkOutTime\": \"12:00\",\n      \"overridesPropertyCheckOutTime\": true,\n      \"lateCheckOutPeriods\": [\n        {\n          \"startTime\": \"12:00\",\n          \"endTime\": \"16:00\",\n          \"chargeType\": \"Fixed\",\n          \"rates\": [\n            {\n              \"currency\": \"EUR\",\n              \"rate\": 20\n            }\n          ],\n          \"occupyQuota\": false\n        },\n        {\n          \"startTime\": \"16:00\",\n          \"endTime\": \"24:00\",\n          \"chargeType\": \"Forbidden\",\n          \"rates\": [],\n          \"occupyQuota\": false\n        }\n      ]\n    }\n  ]\n}\n```"
    },
    {
      "name": "PropertyKind",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Reference%20Data%20API%20V1)\n\nProperty Kind API возвращает справочник типов средств размещения.\nСправочник помогает определить, к какому типу относится объект: например, отель, апартаменты или другой вариант размещения.\n\nКаждый тип содержит:\n\n1. `id` - числовой идентификатор типа средства размещения.\n1. `displayName` - название для отображения.\n1. `propertyKindType` - системный тип средства размещения.\n\nИспользуйте этот справочник, когда нужно хранить или показывать тип объекта в едином формате."
    },
    {
      "name": "PaymentMethods",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Reference%20Data%20API%20V1)\n\nPayment Methods API возвращает справочник способов оплаты, доступных в Partner API.\nСправочник помогает сопоставить код способа оплаты с его типом и использовать одинаковые значения в разных сценариях интеграции.\n\nКаждый способ оплаты содержит:\n\n1. `code` - код способа оплаты.\n1. `type` - тип способа оплаты.\n\nИспользуйте значения из справочника при передаче или обработке платежной информации в связанных API."
    },
    {
      "name": "PropertyAmenity",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Reference%20Data%20API%20V1)\n\nProperty Amenity API возвращает справочник типов удобств средства размещения.\nЭти значения можно использовать для отображения и сопоставления удобств в интерфейсах и интеграциях.\n\nДля каждого типа удобства доступны поля:\n\n1. `code` - код типа удобства, например `parking`.\n1. `displayName` - название для отображения.\n1. `chargeTypeApplicable` - признак, применим ли к этому удобству тип оплаты.\n\nЕсли `chargeTypeApplicable` равен `true`, для удобства может быть важно различать бесплатное и платное предоставление."
    },
    {
      "name": "CorporateApi",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Reference%20Data%20API%20V1)\n\nCorporate API позволяет создать корпоративного клиента и получить его данные по идентификатору.\nКорпоративный клиент используется в интеграциях, где нужно связать бронирование или оплату с юридическим лицом.\n\nПри создании клиента передаются обязательные реквизиты:\n\n1. `taxpayerIdentificationNumber` - ИНН.\n1. `registrationReasonCode` - КПП.\n1. `metaData` - дополнительные данные о клиенте, если они нужны интеграции.\n\nВ ответе API возвращает `id`, юридическое название клиента `legalName` и сохраненные реквизиты."
    },
    {
      "name": "Reservation",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/public-api/?urls.primaryName=Read%20Reservation%20API%20V1)\n\nRead Reservation API позволяет получить информацию о бронированиях средств размещения из компонентов\n*TL: Booking Engine*, *TL: Channel Manager* и *TL: WebPMS*.\n\n### Получение краткой информации по бронированиям\n\nМетод возвращает постраничный список с краткой информацией по каждому бронированию.\n\n- Параметр `lastModification` позволяет начать получение списка бронирований,\n  сделанных или измененных после указанной даты/времени в часовой зоне UTC.\n  Параметр можно не указывать, чтобы начать полную синхронизацию.\n\n- Параметр `continueToken` позволяет продолжить получение списка.\n  Его значение берется из результатов предыдущего запроса.\n  Срок службы токена не ограничен.\n  Запрос может вернуть полученное ранее, но уже изменившееся бронирование.\n\n- Признак `hasMoreData = false` информирует о достижении конца списка.\n  Даже после этого запросы продолжения будут возвращать новые данные,\n  появившиеся с момента предыдущего запроса.\n\nЕсли произойдет потеря `continueToken`, рекомендуется выполнить новый запрос\nс использованием параметра `lastModification` для получения нового `continueToken`.\n\nЗначение для `lastModification` рекомендуется определить следующим образом:\nукажите дату последнего изменения бронирования `lastModification` минус два дня.\nЭтот подход поможет избежать пропуска бронирований при последующем запросе данных.\n\n### Получение информации по бронированию\n\nМетод возвращает детальную информацию по одному бронированию.\n\nВ ответе есть настройки, доступные через [ContentApi](#tag/ContentApi):\n\n- `booking.roomStays[].ratePlans[]` - тарифы.\n- `booking.roomStays[].dailyRates[].RatePlanId` - тарифы.\n- `booking.roomStays[].roomType` - категория номеров.\n- `booking.roomStays[].services[]` - услуги.\n- `booking.services[]` - услуги с темпом начислением цены «За бронь»."
    },
    {
      "name": "SearchRoomStays",
      "description": "### [Swagger](https://partner.tlintegration.com/docs/booking-process/?urls.primaryName=Search%20API%20V1)\n\n**Важно:** Обязательным условием предоставления Search API является использование результатов поиска для создания\nбронирований в TravelLine: Platform. В случае нарушения условия предоставления, API может быть отключено правообладателем\nв одностороннем порядке. Для возобновления доступа к API напишите [support@travelline.ru](mailto:support@travelline.ru)\n\nSearch API предоставляет поиск вариантов размещения с минимальной ценой по всем доступным средствам размещения (до 200)\nи выборки предложений для конкретного средства размещения.\n\nВ поиске предоставляются данные на год вперед от текущей даты. Максимально количество дней между параметрами\n`arrivalDate` и `departureDate` — 100. Максимальное количество дней между датой `arrivalDate` и текущей датой — 365.\n\nДоступны два отдельных метода, которые возвращают сведения о раннем заезде/ позднем выезде\nи о дополнительных услугах для конкретного размещения. Обе группы данных могут быть получены одним запросом:  \n`GET /api/search/v1/properties/{propertyId}/room-stays` при указании `includeExtraStays=true` и `includeExtraServices=true`.\n\n### Фильтры в агрегационном поиске\n\nВ методе `/api/search/v1/properties/room-stays/search` можно указать фильтры:\n\n**По наличию питания** — поле `mealPreference.mealType`. В запросе можно передать следующие значения:\n\n*All* — отображение минимального по стоимости варианта проживания по каждому средству размещения.\n\n*MealOnly* — отображение минимального по стоимости варианта проживания с включенным в стоимость тарифа питанием\nпо каждому средству размещения. Если отсутствует такой вариант проживания, средство размещения не выводится.\n\n**По типу питания** — поле `mealPreference.mealsIncluded`.\nВ запросе можно передать значения возможных вариантов питания, которые доступны в ответе метода `content/v1/meal-plans`,\nа также в ответе методов `content/v1/properties` — отображение всей информации о доступных средствах размещения\nи `content/v1/properties{propertyId}` — отображение информации по конкретному средству размещения.\n\nРезультат поиска показывает минимальные по стоимости варианты проживания с включенными в стоимость тарифа конкретными\nтипами питания по каждому средству размещения. Например, если в запросе указать только значения `BreakFast`, в ответе\nможно получить минимальные по стоимости варианты проживания с включенным в стоимость тарифа типом питания `BreakFast`.\nПри этом, в ответе будут отсутствовать варианты `AllInсlusive` или `HalfBoard`.\n\nФильтр по типу питания можно использовать только при наличии типа питания `MealOnly`.\n\n**По минимальной и максимальной стоимости проживания** — поля `pricePreference.minPrice` и `pricePreference.maxPrice`.\n\nЭти поля являются необязательными. Если передать значения полей в API, результат поиска покажет варианты проживания\nс минимальной ценой по всем доступным средствам размещения по выбранным фильтрам."
    },
    {
      "name": "PropertyGuest",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms/swagger/index.html)\n\nМетоды поиска, извлечения и обновления профилей гостей и связанных с ними данных (карты лояльности, бронирования, документы) средства размещения.\nЭта информация отображается в модуле *TL: WebPMS* в разделе \"Профили гостей\"."
    },
    {
      "name": "PropertyCompany",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms/swagger/index.html)\n\nМетоды позволяют искать и извлекать информацию о компаниях, содержащихся в справочнике компаний средства размещения.\nЭта информация отображается в модуле *TL: WebPMS* в разделе \"Справочник компаний\"."
    },
    {
      "name": "Property",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms/swagger/index.html)"
    },
    {
      "name": "PropertyRoom",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms/swagger/index.html)\n\nМетоды позволяют искать и извлекать информацию о номерах, содержащихся в номерном фонде средства размещения.\nЭта информация отображается в модуле *TL: WebPMS* в разделе \"Номерной фонд\"."
    },
    {
      "name": "PropertyReservation",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms/swagger/index.html)\n\nRead Reservation API позволяет получить информацию о бронированиях средств размещения из модуля *TL: WebPMS*.\n\n### Получение краткой информации по бронированиям\n\nМетод возвращает постраничный список с краткой информацией по каждому бронированию.\n\n- Параметр `pageToken` позволяет продолжить получение списка.\n  Его значение берется из результатов предыдущего запроса.\n  Срок службы токена не ограничен.\n  Запрос может вернуть полученное ранее, но уже изменившееся бронирование.\n- Признак `hasNextPage = false` информирует о достижении конца списка.\n  Даже после этого запросы продолжения будут возвращать новые данные,\n  появившиеся с момента предыдущего запроса.\n\nЕсли произойдет потеря `pageToken`, рекомендуется выполнить новый запрос для получения нового `pageToken`.\n\n### Получение деталей бронирования\n\nМетод возвращает детальную информацию по одному бронированию.\n\nВ ответе есть идентификаторы, которые позволяют получить информацию:\n\n- Через [ContentApi](#tag/ContentApi):\n  - `reservation.roomStays[].roomType` - категория номеров.\n  - `reservation.roomStays[].options[]` - услуги.\n\n- Через [PMS API > PropertyRoom](#tag/PropertyRoom):\n  - `reservation.roomStays[].room` - комнаты.\n\n- Через [PMS API > PropertyGuest](#tag/PropertyGuest):\n  - `reservation.roomStays[].guestIds` - гости.\n\n### Сохранение платежа в проживание\n\nМетод позволяет сложить платёж в проживание по идентификатору проживания `pmsRoomStayId`, который можно получить\nв деталях бронирования через [PMS API > PropertyReservation](#tag/PropertyReservation).\n\nВходящие данные:\n\n- `pmsPaymentSystemId` - Способ оплаты. Необходимо указать один из доступных способов, которые можно получить через\n  GET `/v2/properties/{propertyId}/reservations/{number}/room-stays/{pmsRoomStayId}/find-available-payment-systems`"
    },
    {
      "name": "PropertyAnalytics",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms-analytics/swagger/index.html)\n\nPMS Analytics API позволяет получать ежедневную статистику из модуля *TL: WebPMS*.\n\n### Получение ежедневной статистики заполняемости\n\nМетод возвращает ежедневную статистику по указанному периоду для средства размещения.\n\n- Диапазон дат ограничен 31 днём. Параметры `startStayDate` и `endStayDate` обязательны и задаются в формате ISO-8601 (YYYY-MM-DD).\n- Опциональный параметр `otbDate` позволяет отфильтровать историческую статистику только по бронированиям, созданным на указанную дату (OTB — On-the-Books).\n\n**Поля ответа**:\n\n- `currencyCode` — код валюты (ISO-4217)\n- `propertyRoomCount` — общее количество номеров, существующих в отеле согласно паспорту средства размещения\n- `dailyOccupancies` — ежедневная статистика:\n  - `date` — дата\n  - `occupancyRate` — коэффициент загрузки отеля (0.0–1.0, где 1.0 = 100%)\n  - `closedRoomCount` — номера не в эксплуатации (ремонт, консервация)\n  - `occupancyRoomCount` — занятые номера (включает только платные, номера с нулевой стомостью не включает)\n  - `complimentaryOccupancyRoomCount` — занятые номера с нулевой стоимостью\n  - `roomRevenue` — чистая выручка по номерам (без НДС, комиссий, доп. услуг)\n  - `revenue` — валовая выручка отеля за день\n  - `mealRevenue` — выручка по питанию\n  - `arrivalCount` — количество заездов за дату\n  - `guestCount` — количество гостей (взрослые + дети)"
    },
    {
      "name": "Bookings",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms-integration-storage/swagger/index.html)\n\nРаздел *Bookings* предоставляет данные о бронированиях, синхронизированных из внешней АСУ\nсредства размещения. *PMS Integration Storage API* выступает зеркалом данных АСУ:\nон хранит снимки броней и уведомляет интегратора об их изменениях.\n\nПри создании или изменении брони во внешней АСУ публикуется событие\n`pms_integration_storage:booking_changed` с идентификаторами `propertyId` и `reservationId`.\nПолучив событие, интегратор запрашивает детали брони по конечной точке ниже, передавая\nзначение `reservationId` как `bookingId` в пути запроса.\n\n### Статусы бронирования\n\nСтатус брони указан в поле `status`:\n\n- `Confirmed`: подтверждена.\n- `Waitlisted`: в листе ожидания.\n- `InHouse`: гость заселён.\n- `CheckedOut`: гость выехал.\n- `Cancelled`: отменена.\n- `Unknown`: статус не определён.\n\nНабор значений открытый — в новых версиях возможны дополнительные статусы.\n\n### Структура брони\n\nБронирование (`Booking`) содержит одно или несколько проживаний (`roomStays`).\nКаждое проживание описывает:\n\n- `roomTypes` — категории номеров, применимые к проживанию.\n- `ratePlans` — применимые тарифы.\n- `inventoryBlocks` — блоки квот, если проживание относится к выделенному блоку.\n- `roomRates` — суточная разбивка цены. Каждая запись ссылается на элементы\n  `roomTypes`, `ratePlans` и `inventoryBlocks` по полю `index`.\n- `services` — дополнительные услуги (питание, трансфер и т. п.).\n- `guestCounts` — количество гостей с разбивкой по возрастным категориям (`AdultBed`, `ChildBandBed`).\n- `stayDates` — даты заезда и выезда, а также фактическое время заезда и выезда, если они уже произошли.\n\nДенежные суммы (`total`, `roomRevenues`) указаны в одной валюте (`currencyCode` по ISO-4217);\nполе `amountAfterTax` содержит сумму после налогов.\n\nИдентификаторы брони во внешних системах перечислены в `uniqueIds`. Поле `idContext`\nпозволяет различать источник идентификатора (`Pms`, `Internal`, `External`).\n\n### Конечная точка\n\n```\nGET /v1/properties/{propertyId}/bookings/{bookingId}\n```\n\nПолучение деталей бронирования. Значение `bookingId` поступает в payload события\n`pms_integration_storage:booking_changed` в поле `reservationId`.\n\n**Параметры:**\n\n- `propertyId` *(string, path)*: ID средства размещения.\n- `bookingId` *(string, path)*: ID брони в *PMS Integration Storage API*.\n\n**Пример:**\n\n```json\nGET /v1/properties/2490/bookings/606541\n\n{\n  \"booking\": {\n    \"id\": \"606541\",\n    \"status\": \"Confirmed\",\n    \"propertyId\": \"2490\",\n    \"uniqueIds\": [\n      { \"id\": \"RES-12345\", \"idContext\": \"Pms\" }\n    ],\n    \"bookingChannels\": [\n      {\n        \"code\": \"TA001\",\n        \"codeType\": \"Pms\",\n        \"name\": \"Booking.com\",\n        \"bookingChannelType\": \"TravelAgent\"\n      }\n    ],\n    \"roomStays\": [\n      {\n        \"index\": 1,\n        \"sourceOfBusiness\": \"WEB\",\n        \"marketCode\": \"LEISURE\",\n        \"roomTypes\": [\n          { \"index\": 0, \"pmsSideCode\": \"STD\" }\n        ],\n        \"ratePlans\": [\n          { \"index\": 0, \"pmsSideCode\": \"BAR\" }\n        ],\n        \"inventoryBlocks\": [],\n        \"roomRates\": [\n          {\n            \"stayDate\": \"2024-03-27\",\n            \"roomTypeIndex\": 0,\n            \"ratePlanIndex\": 0,\n            \"inventoryBlockIndex\": null,\n            \"total\": { \"amountAfterTax\": 5000, \"currencyCode\": \"RUB\" }\n          }\n        ],\n        \"services\": [\n          {\n            \"quantity\": 1,\n            \"pmsSideCode\": \"BRKF\",\n            \"name\": \"Breakfast\",\n            \"startDate\": \"2024-03-27\",\n            \"durationStayUnits\": 3,\n            \"total\": { \"amountAfterTax\": 30, \"currencyCode\": \"RUB\" },\n            \"inclusive\": true\n          }\n        ],\n        \"guestCounts\": [\n          { \"ageQualifyingCode\": \"AdultBed\", \"count\": 2, \"age\": null }\n        ],\n        \"stayDates\": {\n          \"arrivalDateTime\": \"2024-03-27T14:00:00\",\n          \"departureDateTime\": \"2024-03-30T12:00:00\",\n          \"actualCheckInDateTime\": null,\n          \"actualCheckOutDateTime\": null\n        }\n      }\n    ],\n    \"total\": { \"amountAfterTax\": 15000, \"currencyCode\": \"RUB\" },\n    \"guaranteeInfo\": { \"guaranteeCode\": \"CC\" },\n    \"pmsSideCreateDateTime\": \"2024-03-20T10:30:00\",\n    \"pmsSideUpdateDateTime\": \"2024-03-27T16:45:00\",\n    \"updateDateTime\": \"2024-03-27T13:45:00Z\",\n    \"cancellationInfo\": null,\n    \"roomRevenues\": [\n      {\n        \"stayDate\": \"2024-03-27\",\n        \"amount\": { \"amountAfterTax\": 5000, \"currencyCode\": \"RUB\" }\n      }\n    ]\n  }\n}\n```"
    },
    {
      "name": "Inventory",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms-integration-storage/swagger/index.html)\n\nРаздел *Inventory* предоставляет данные о доступности номеров и блоках квот,\nсинхронизированных из внешней АСУ средства размещения. Платформа TravelLine публикует событие\nоб изменениях, а интегратор по этим событиям запрашивает актуальные данные через REST.\n\n### Две сущности\n\nРаздел оперирует двумя независимыми сущностями:\n\n- **Ежедневный инвентарь** (`DailyRoomTypeInventory`) — фактическая доступность номеров\n  по категориям на конкретную дату:\n  - `physicalRoomCount` — общее число физических номеров категории.\n  - `availableRoomCount` — число номеров, доступных для продажи.\n  - `outOfOrderRoomCount` — число номеров, выведенных из продажи (ремонт, профилактика и т. п.).\n\n  Изменения публикуются событием `pms_integration_storage:inventory_changed`\n  с диапазоном дат и кодами категорий, для которых нужно перечитать данные.\n\n- **Блок инвентаря** (`InventoryBlock`) — выделенная квота с привязкой\n  к набору тарифов (`ratePlanCodes`), суточной разбивкой (`dailyItems`) и опциональным\n  ценообразованием (`pricing`). Используется для групповых бронирований, корпоративных\n  квот и обмена с каналами продаж.\n\n  Изменения публикуются событием `pms_integration_storage:inventory_block_changed`.\n\n### Статусы блока\n\nСтатус блока (`blockStatus`) принимает одно из значений:\n\n- `Inquiry`: предварительный запрос — блок зарезервирован, но не подтверждён.\n- `Active`: активный, доступен для реализации.\n- `Cancelled`: отменён.\n- `Unknown`: статус не определён.\n\nНабор значений открытый — в новых версиях возможны дополнительные статусы.\n\n### Конечная точка: поиск инвентаря\n\n```\nPOST /v1/properties/{propertyId}/inventories/search\n```\n\nВозвращает ежедневный инвентарь по заданным категориям номеров и диапазону дат.\n\n**Параметры:**\n\n- `propertyId` *(string, path)*: ID средства размещения.\n\n**Тело запроса** (`SearchInventoryRequest`):\n\n| Параметр | Тип | Обязательный | Описание |\n| - | - | - | - |\n| `roomTypeCodes` | string[] | Да | Коды категорий номеров на стороне PMS. |\n| `startDate` | string (date) | Да | Начало периода (включительно) в формате ISO-8601 `yyyy-MM-dd`. |\n| `endDate` | string (date) | Да | Конец периода (включительно) в формате ISO-8601 `yyyy-MM-dd`. |\n\nМаксимальная длина периода — 2 года.\n\n**Пример:**\n\n```json\nPOST /v1/properties/2490/inventories/search\n\n{\n  \"roomTypeCodes\": [\"DBL\", \"SGL\"],\n  \"startDate\": \"2026-03-15\",\n  \"endDate\": \"2026-03-17\"\n}\n```\n\n**Ответ:**\n\n```json\n{\n  \"inventory\": {\n    \"propertyId\": \"2490\",\n    \"inventories\": [\n      {\n        \"roomTypeCode\": \"DBL\",\n        \"date\": \"2026-03-15\",\n        \"physicalRoomCount\": 50,\n        \"availableRoomCount\": 25,\n        \"outOfOrderRoomCount\": 2,\n        \"updateDateTime\": \"2026-03-15T14:30:00Z\"\n      },\n      {\n        \"roomTypeCode\": \"DBL\",\n        \"date\": \"2026-03-16\",\n        \"physicalRoomCount\": 50,\n        \"availableRoomCount\": 18,\n        \"outOfOrderRoomCount\": 2,\n        \"updateDateTime\": \"2026-03-15T14:30:00Z\"\n      },\n      {\n        \"roomTypeCode\": \"SGL\",\n        \"date\": \"2026-03-15\",\n        \"physicalRoomCount\": 20,\n        \"availableRoomCount\": 12,\n        \"outOfOrderRoomCount\": 0,\n        \"updateDateTime\": \"2026-03-15T14:30:00Z\"\n      }\n    ]\n  }\n}\n```\n\n### Конечная точка: блок инвентаря\n\n```\nGET /v1/properties/{propertyId}/inventories/blocks/{inventoryBlockId}\n```\n\nПолучение деталей блока квот. Значение `inventoryBlockId` поступает в payload события\n`pms_integration_storage:inventory_block_changed`.\n\n**Параметры:**\n\n- `propertyId` *(string, path)*: ID средства размещения.\n- `inventoryBlockId` *(string, path)*: ID блока в *PMS Integration Storage API*.\n\n**Пример:**\n\n```json\nGET /v1/properties/2490/inventories/blocks/12345\n\n{\n  \"inventoryBlock\": {\n    \"id\": \"12345\",\n    \"propertyId\": \"2490\",\n    \"pmsSideId\": \"BLK-001\",\n    \"pmsSideCode\": \"QUOTA-2024\",\n    \"blockStatus\": \"Active\",\n    \"ratePlanCodes\": [\"BAR\", \"GROUP\"],\n    \"pmsSideCreateDateTime\": \"2026-02-15T10:00:00\",\n    \"pmsSideCancelDateTime\": null,\n    \"updateDateTime\": \"2026-03-15T14:30:00Z\",\n    \"dailyItems\": [\n      {\n        \"date\": \"2026-03-15\",\n        \"roomTypeCode\": \"DBL\",\n        \"blockedCount\": 10,\n        \"realizedCount\": 3,\n        \"cutoffDate\": \"2026-03-10\",\n        \"pricing\": {\n          \"oneAdultPrice\": 5500,\n          \"servicesPrice\": 1200,\n          \"currencyCode\": \"RUB\"\n        }\n      },\n      {\n        \"date\": \"2026-03-16\",\n        \"roomTypeCode\": \"DBL\",\n        \"blockedCount\": 10,\n        \"realizedCount\": 2,\n        \"cutoffDate\": \"2026-03-10\",\n        \"pricing\": {\n          \"oneAdultPrice\": 5500,\n          \"servicesPrice\": 1200,\n          \"currencyCode\": \"RUB\"\n        }\n      }\n    ]\n  }\n}\n```"
    },
    {
      "name": "Statistics",
      "description": "### [Swagger](https://partner.tlintegration.com/api/pms-integration-storage/swagger/index.html)\n\nРаздел *Statistics* предоставляет агрегированные показатели по бронированиям,\nсинхронизированным из внешней АСУ. Используется для аналитики загрузки и\nэффективности тарифов.\n\nВ отличие от *Bookings* и *Inventory*, методы раздела вызываются по требованию\nи не связаны с вебхук-уведомлениями.\n\n### Единицы проживания\n\nЕдиница проживания — это минимальная учётная единица, по которой АСУ\nрассчитывает стоимость и загрузку. В зависимости от настроек АСУ единицей может быть\nночь или день. Значение возвращается как целое число в поле `stayUnits`.\n\n### Конечная точка\n\n```\nGET /v1/properties/{propertyId}/calculate-stay-units\n```\n\nВозвращает суммарное количество забронированных единиц проживания для заданного тарифа\nи периода. В расчёт попадают брони со статусом `Confirmed`, `InHouse` и `CheckedOut`,\nу которых даты проживания пересекаются с указанным диапазоном.\n\n**Параметры:**\n\n| Параметр | Тип | Обязательный | Описание |\n| - | - | - | - |\n| `propertyId` | string (path) | Да | ID средства размещения. |\n| `firstStayDate` | string (query, date) | Да | Начало периода (включительно) в формате ISO-8601 `yyyy-MM-dd`, локальное время средства размещения. |\n| `lastStayDate` | string (query, date) | Да | Конец периода (включительно) в формате ISO-8601 `yyyy-MM-dd`, локальное время средства размещения. |\n| `pmsSideRatePlanCode` | string (query) | Да | Код тарифа на стороне PMS. **Чувствителен к регистру.** |\n\n**Пример:**\n\n```json\nGET /v1/properties/2490/calculate-stay-units?firstStayDate=2025-05-15&lastStayDate=2025-08-15&pmsSideRatePlanCode=BAR1\n\n{\n  \"stayUnits\": 92\n}\n```"
    },
    {
      "name": "Reviews",
      "description": "### [Swagger](https://partner.tlintegration.com/api/reputation-public-reviews/swagger)\n\nPublic Reviews API позволяет получить отзывы средств размещения и статистику рейтингов из различных источников (Яндекс, Google, Booking, TripAdvisor и др.).\n\nЭта информация используется для отображения репутации отеля на сайтах партнеров и в системах управления репутацией.\n\n### Основные возможности\n\n1. **Получение списка отзывов** - постраничный список отзывов с возможностью сортировки по дате или рейтингу\n2. **Статистика отзывов** - средняя оценка и общее количество отзывов\n3. **Справочники** - источники отзывов и шкала рейтингов\n4. **Переводы** - автоматический перевод отзывов на запрашиваемый язык\n\n### Кеширование\n\n⚠️ **Важно**: Метод получения списка отзывов использует серверное кеширование для оптимизации производительности.\n\n**Время жизни кеша**: 30 секунд\n\nЭто означает:\n- Повторные запросы в течение 30 секунд вернут идентичные данные\n- Новые отзывы появятся с задержкой до 30 секунд\n- Изменения существующих отзывов отобразятся с той же задержкой\n\n### Пагинация\n\nAPI использует курсорную пагинацию для эффективной работы с большими объемами данных:\n\n- Используйте `maxPageSize` для контроля объема данных за один запрос (максимум 100)\n- Обрабатывайте `nextPageToken` для получения всех отзывов\n- Проверяйте `hasNextPage` перед следующим запросом\n\n### Авторизация\n\nВсе запросы требуют Bearer токен в заголовке `Authorization`. Токен должен быть действительным и иметь права доступа к указанному средству размещения.\n\n### Источники отзывов\n\nAPI агрегирует отзывы из различных источников:\n\n- Яндекс.Карты\n- Google Maps\n- Booking.com\n- TripAdvisor\n- Другие платформы\n\nКаждый отзыв содержит информацию об источнике в поле `sourceId`.\n\n### Рейтинговая шкала\n\nОтзывы оцениваются по 10-балльной шкале с категориями:\n\n- **Отлично** (8-10) - высокая оценка\n- **Очень хорошо** (6-8) - оценка выше среднего\n- **Хорошо** (4-6) - средняя оценка\n- **Неплохо** (2-4) - оценка ниже среднего\n- **Плохо** (0-2) - низкая оценка\n\n### Переводы\n\nAPI поддерживает автоматический перевод отзывов на различные языки. Для получения перевода используйте параметр `languageCode` (IETF BCP-47 формат, например: `en`, `de`, `fr`).\n\nЕсли перевод доступен, он будет возвращен в поле `translatedText`."
    }
  ],
  "x-tagGroups": [
    {
      "name": "Документация API",
      "tags": [
        "Авторизация",
        "Лимиты",
        "Коды ошибок"
      ]
    },
    {
      "name": "TravelLine Partner - Content API",
      "tags": [
        "CancellationRules",
        "ContentApi",
        "ExtraStayRules"
      ]
    },
    {
      "name": "ReferenceData API",
      "tags": [
        "CorporateApi",
        "PaymentMethods",
        "PropertyAmenity",
        "PropertyKind"
      ]
    },
    {
      "name": "Read Reservation API",
      "tags": [
        "Reservation"
      ]
    },
    {
      "name": "TravelLine Partner - Search API",
      "tags": [
        "SearchRoomStays"
      ]
    },
    {
      "name": "PMS API",
      "tags": [
        "Property",
        "PropertyCompany",
        "PropertyGuest",
        "PropertyReservation",
        "PropertyRoom"
      ]
    },
    {
      "name": "PMS Analytics API",
      "tags": [
        "PropertyAnalytics"
      ]
    },
    {
      "name": "TravelLine Partner - PMS Integration Storage API",
      "tags": [
        "Bookings",
        "Inventory",
        "Statistics"
      ]
    },
    {
      "name": "Public Reviews API",
      "tags": [
        "Reviews"
      ]
    }
  ]
}