{
  "swagger": "2.0",
  "info": {
    "title": "apaleo Rate Plan API - not safe for work",
    "description": "Continuously evolving version - use at your own risk! Manage the rate plans and rates to rent out your inventory and extra services.",
    "version": "v0-nsfw"
  },
  "paths": {
    "/settings/v0-nsfw/age-categories/{id}": {
      "get": {
        "tags": [
          "AgeCategory"
        ],
        "summary": "Get an age category",
        "description": "Get an age category by id.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.age_categories.read\u0027.",
        "operationId": "SettingsAge-categoriesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the age category.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return all the age category data.",
            "schema": {
              "$ref": "#/definitions/AgeCategoryModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "AgeCategory"
        ],
        "summary": "Allows to modify properties of an age category",
        "description": "Here is the list of operations that are currently allowed:\n- Replace name, minimum age and maximum age\n\n\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.age_categories.modify\u0027.",
        "operationId": "SettingsAge-categoriesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the age category to be modified.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "AgeCategory"
        ],
        "summary": "Delete an age category",
        "description": "Use this call to delete an age category. You can only delete an age category if it is not already used in a rate\nplan to define age specific prices.\n\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.age_categories.delete\u0027.",
        "operationId": "SettingsAge-categoriesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the age category.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the age category was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/settings/v0-nsfw/age-categories": {
      "post": {
        "tags": [
          "AgeCategory"
        ],
        "summary": "Create an age category",
        "description": "Use this call to create a new age category. The age ranges for categories must not overlap each other and the\nallowed values span from 0 to 17.\n\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.age_categories.create\u0027.",
        "operationId": "SettingsAge-categoriesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the age category.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateAgeCategoryModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Creation of the new age category was successful.",
            "schema": {
              "$ref": "#/definitions/AgeCategoryCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "AgeCategory"
        ],
        "summary": "Get an age category list",
        "description": "Get the list of age categories.\n\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.age_categories.read\u0027.",
        "operationId": "SettingsAge-categoriesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Return age categories for the specific property",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Return all age categories.",
            "schema": {
              "$ref": "#/definitions/AgeCategoryListModel"
            }
          },
          "204": {
            "description": "Could not find any age categories."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/cancellation-policies": {
      "post": {
        "tags": [
          "CancellationPolicy"
        ],
        "summary": "Create a cancellation policy.",
        "description": "Create a cancellation policy.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.cancellation_policies.create\u0027.",
        "operationId": "RateplanCancellation-policiesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the cancellation policy.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateCancellationPolicyModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Cancellation policy successfully created.",
            "schema": {
              "$ref": "#/definitions/CancellationPolicyCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "CancellationPolicy"
        ],
        "summary": "Get all cancellation policies.",
        "description": "Get the list of cancellation policies.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.cancellation_policies.read\u0027.",
        "operationId": "RateplanCancellation-policiesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter cancellation policies by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/CancellationPolicyListModel"
            }
          },
          "204": {
            "description": "No cancellation policies could be found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/cancellation-policies/{id}": {
      "get": {
        "tags": [
          "CancellationPolicy"
        ],
        "summary": "Get a specific cancellation policy.",
        "description": "Get a specific cancellation policy.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.cancellation_policies.read\u0027.",
        "operationId": "RateplanCancellation-policiesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the cancellation policy.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/CancellationPolicyModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "CancellationPolicy"
        ],
        "summary": "Allows to modify properties of a cancellation policy",
        "description": "Here is the list of operations that are currently allowed:\n- Replace name and description\n- Replace the period from reference\n- Replace the reference\n- Replace the fee details: fixed and percent values\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.cancellation_policies.modify\u0027.",
        "operationId": "RateplanCancellation-policiesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the cancellation policy to be modified.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "CancellationPolicy"
        ],
        "summary": "Delete a cancellation policy",
        "description": "Use this call to delete a cancellation policy.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.cancellation_policies.delete\u0027.",
        "operationId": "RateplanCancellation-policiesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the cancellation policy.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the cancellation policy was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/companies": {
      "post": {
        "tags": [
          "Company"
        ],
        "summary": "Create a company",
        "description": "Use this call to create a new company.\u003Cbr\u003EYou must have at least one of these scopes: \u0027companies.create, companies.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.companies.create\u0027.",
        "operationId": "RateplanCompaniesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the company.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateCompanyModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/CompanyCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "501": {
            "description": "Not Implemented"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "companies.create",
              "companies.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Company"
        ],
        "summary": "Get a list of companies",
        "description": "Get the list of companies.\n\u003Cbr\u003EYou must have at least one of these scopes: \u0027companies.read, companies.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.companies.read\u0027.",
        "operationId": "RateplanCompaniesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "Return companies with any of the specified rate plans",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "corporateCodes",
            "description": "Return companies that have any of the requested corporate codes.\nUse \u0027*\u0027 to find companies with any corporate code.\nUse null (or %00 URL-encoded) to find companies without corporate codes.\nThese can be combined: [null, \u0022CODE1\u0022] returns companies with no codes OR CODE1.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "textSearch",
            "description": "This will filter all companies for the provided free text.\nCurrently it only looks up if the company name contains one of the provided values",
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: identifiers. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "identifiers"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/CompanyListModel"
            }
          },
          "204": {
            "description": "Could not find any companies."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "companies.read",
              "companies.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/companies/{id}": {
      "get": {
        "tags": [
          "Company"
        ],
        "summary": "Get a company",
        "description": "Get a company by ID.\u003Cbr\u003EYou must have at least one of these scopes: \u0027companies.read, companies.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.companies.read\u0027.",
        "operationId": "RateplanCompaniesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the company.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: identifiers. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "identifiers"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/CompanyModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "companies.read",
              "companies.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Company"
        ],
        "summary": "Modify a company",
        "description": "Here is the list of operations that are currently allowed:\n- Replace name, invoicingEmail, phone, taxId, additionalTaxId, additionalTaxId2, invoiceNetworkIdentity, address, canCheckOutOnAr\n- Add, replace and remove rate plans\n- Add, replace and remove identifiers\n- Replace type\u003Cbr\u003EYou must have this scope: \u0027companies.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.companies.modify\u0027.",
        "operationId": "RateplanCompaniesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the company to be modified.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "501": {
            "description": "Not Implemented"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "companies.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Company"
        ],
        "summary": "Delete a company",
        "description": "Deletes a company.\nWarning: This operation also removes company from all rate plans if not yet used.\nThe deleted company won\u0027t be available in the company VAT report anymore.\u003Cbr\u003EYou must have this scope: \u0027companies.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.companies.delete\u0027.",
        "operationId": "RateplanCompaniesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the company to delete",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "companies.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/corporate-codes/codes": {
      "get": {
        "tags": [
          "CorporateCodes"
        ],
        "summary": "Returns a list of corporate codes.",
        "description": "Returns all existing corporate codes that match given criteria.\u003Cbr\u003EYou must have this scope: \u0027rateplans.read-corporate\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.corporate_codes.read\u0027.",
        "operationId": "RateplanCorporate-codesCodesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Return codes for a specific property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "companyId",
            "description": "Return codes for a specific company",
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "A collection of corporate codes.",
            "schema": {
              "$ref": "#/definitions/CorporateCodeListModel"
            }
          },
          "204": {
            "description": "No codes found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read-corporate",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/hurdle-rates": {
      "put": {
        "tags": [
          "HurdleRates"
        ],
        "summary": "Upserts hurdle rates for a specific property, unit group and time slice template",
        "description": "Creates new hurdle rates or updates existing ones based on the date. Only affects the specific dates provided in the request, leaving other dates unchanged.\nMaximum 730 hurdle rates allowed in a single request.\u003Cbr\u003EYou must have at least one of these scopes: \u0027hurdle-rates.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.hurdle_rates.modify\u0027.",
        "operationId": "RateplanHurdle-ratesPut",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The hurdle rates to upsert",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UpsertHurdleRatesRequestModel"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the count of processed, created, and updated hurdle rates",
            "schema": {
              "$ref": "#/definitions/UpsertHurdleRatesResponseModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "hurdle-rates.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "HurdleRates"
        ],
        "summary": "Retrieves a paginated list of hurdle rates based on the specified filter criteria.",
        "description": "\u003Cbr\u003EYou must have at least one of these scopes: \u0027hurdle-rates.read, setup.read\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.hurdle_rates.read\u0027.",
        "operationId": "RateplanHurdle-ratesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "The property id",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "unitGroupIds",
            "description": "The list of unit group identifiers.",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start date for the specified range.",
            "required": true,
            "type": "string",
            "format": "date"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end date for the specified range.",
            "required": true,
            "type": "string",
            "format": "date"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Return hurdle rates matching filter criteria.",
            "schema": {
              "$ref": "#/definitions/HurdleRatesListModel"
            }
          },
          "204": {
            "description": "There are no hurdle rates found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "hurdle-rates.read",
              "setup.read",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/no-show-policies": {
      "post": {
        "tags": [
          "NoShowPolicy"
        ],
        "summary": "Create a no-show policy.",
        "description": "Create a no-show policy.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.no_show_policies.create\u0027.",
        "operationId": "RateplanNo-show-policiesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the no-show policy.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateNoShowPolicyModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "No-show policy successfully created.",
            "schema": {
              "$ref": "#/definitions/NoShowPolicyCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "NoShowPolicy"
        ],
        "summary": "Get all no-show policies.",
        "description": "Get the list of no-show policies.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.no_show_policies.read\u0027.",
        "operationId": "RateplanNo-show-policiesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter no-show policies by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/NoShowPolicyListModel"
            }
          },
          "204": {
            "description": "No no-show policies could be found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/no-show-policies/{id}": {
      "get": {
        "tags": [
          "NoShowPolicy"
        ],
        "summary": "Get a specific no-show policy.",
        "description": "Get a specific no-show policy.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.no_show_policies.read\u0027.",
        "operationId": "RateplanNo-show-policiesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the no-show policy.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/NoShowPolicyModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "NoShowPolicy"
        ],
        "summary": "Allows to modify properties of a no-show policy",
        "description": "Here is the list of operations that are currently allowed:\n- Replace name and description\n- Replace the fee details: fixed and percent values\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.no_show_policies.modify\u0027.",
        "operationId": "RateplanNo-show-policiesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the no-show policy to be modified.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "NoShowPolicy"
        ],
        "summary": "Delete a no-show policy",
        "description": "Use this call to delete a no-show policy.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.no_show_policies.delete\u0027.",
        "operationId": "RateplanNo-show-policiesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the no-show policy.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the no-show policy was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/promo-codes/codes": {
      "get": {
        "tags": [
          "PromoCodes"
        ],
        "summary": "Returns a list of promo codes.",
        "description": "Returns all existing promo codes that match given criteria.\u003Cbr\u003EYou must have this scope: \u0027rateplans.read-corporate\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.promo_codes.read\u0027.",
        "operationId": "RateplanPromo-codesCodesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Return codes for a specific property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "A collection of promo codes.",
            "schema": {
              "$ref": "#/definitions/PromoCodeListModel"
            }
          },
          "204": {
            "description": "No codes found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read-corporate",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans/{id}/rates": {
      "get": {
        "tags": [
          "Rate"
        ],
        "summary": "Returns a list of rates.",
        "description": "Returns all rates for a specific rate plan within the specified time range. If a rate has not\nbeen initialized, it will still be returned, but anything besides the from and to values will be empty.\nThe time range of a rate is defined by the time slice definition of the rate plan.\n\nTime ranges with no initialized rates will not be available for sell.\n\n\nTo be able to read rates for a corporate rate plan a client must additionally have\nthe \u0027rateplans.read-corporate\u0027 scope.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rates.read, rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.read\u0027.",
        "operationId": "RateplanRate-plansByIdRatesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Return all rates for a rate plan.",
            "schema": {
              "$ref": "#/definitions/RateListModel"
            }
          },
          "204": {
            "description": "There are no rates found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.read",
              "rates.manage",
              "admin"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Rate"
        ],
        "summary": "Initializes and changes the rates for the rate plan.",
        "description": "All rates specified in the request will be initialized, or overwritten if they already exist.\n\n\n\nMake sure that the from and to date and time in the rates match the time slice definition of the rate plan.\nThe easiest way to achieve this is calling the GET /rate-plans/{id}/rates for the time range you want to update\nand then resend the payload with the set prices and restrictions.\u003Cbr\u003EYou must have this scope: \u0027rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.modify\u0027.",
        "operationId": "RateplanRate-plansByIdRatesPut",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the rates.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ReplaceRateListModel"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Replace the rates was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Rate"
        ],
        "summary": "Allows to patch multiple rates of a single rate plan.",
        "description": "Note that the specified PATCH operations are applied to each and every rate for the specified time ranges.\nHere is the list of operations that are currently allowed:\n- Add, replace and remove Price\n- Add, replace and remove Restrictions\nDerived rate plans can only have restrictions patched. Requests that include price operations are rejected because prices are inherited from the base rate plan.\u003Cbr\u003EYou must have this scope: \u0027rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.modify\u0027.",
        "operationId": "RateplanRate-plansByIdRatesPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RatesPatchRequestModel"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Replace the rates was successful."
          },
          "404": {
            "description": "No rates found to replace."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Rate"
        ],
        "summary": "Deletes the rates for the rate plan",
        "description": "Deletes all rates in the specifed time range.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rates.delete, rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.delete\u0027.",
        "operationId": "RateplanRate-plansByIdRatesDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Delete of the rates was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.delete",
              "rates.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rates": {
      "get": {
        "tags": [
          "Rate"
        ],
        "summary": "Returns a list of rates for multiple rate plans.",
        "description": "Returns all rates for multiple rate plans within the specified time range. If a rate has not\nbeen initialized, it will still be returned, but anything besides the from and to values will be empty.\nThe time range of a rate is defined by the time slice definition of the rate plan.\n\nTime ranges with no initialized rates will not be available for sell.\n\n\nTo be able to read rates for a corporate rate plan a client must additionally have\nthe \u0027rateplans.read-corporate\u0027 scope.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rates.read, rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.read\u0027.",
        "operationId": "RateplanRatesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "The id of the property.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "The rate plan ids. At most 50 ids can be specified.",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected. The specified time range cannot span more than 60 days.\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected. The specified time range cannot span more than 60 days.\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Return all rates for a rate plan.",
            "schema": {
              "$ref": "#/definitions/BatchRateListModel"
            }
          },
          "204": {
            "description": "There are no rates found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.read",
              "rates.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Rate"
        ],
        "summary": "Allows to patch the rates of multiple rate plans.",
        "description": "Note that the specified PATCH operations are applied to each and every rate for the specified time range.\nHere is the list of operations that are currently allowed:\n- Add, replace and remove Price\n- Add, replace and remove Restrictions\u003Cbr\u003EYou must have this scope: \u0027rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.modify\u0027.",
        "operationId": "RateplanRatesPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "Filter rates for patching by rate plan ids",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "weekDays",
            "description": "The weekdays that will be patched. If not specified, all weekdays will be patched.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday",
                "Sunday"
              ]
            }
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Rate plans were successfully modified."
          },
          "404": {
            "description": "No rates found to replace."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans/{id}/rates/$count": {
      "get": {
        "tags": [
          "Rate"
        ],
        "summary": "Returns the number of rates for a specific rate plan within the specifed time range.",
        "description": "To be able to count rates for a corporate rate plan a client must additionaly have\nthe \u0027rateplans.read-corporate\u0027 scope.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rates.read, rates.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rates.read\u0027.",
        "operationId": "RateplanRate-plansByIdRates$countGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "from",
            "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "to",
            "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/CountModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rates.read",
              "rates.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans": {
      "get": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Get a rate plan list.",
        "description": "Get the list of rate plans depending on client scopes.\n\n\n            \nIf a client has no additional scopes, only public rate plans are returned.\n\nThe \u0027rateplans.read-corporate\u0027 scope adds corporate rate plans to the response.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plansGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Return rate plans for the specific property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "ratePlanCodes",
            "description": "Return rate plans filtered by requested codes",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "includedServiceIds",
            "description": "Return rate plans that have any of the requested included services",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "channelCodes",
            "description": "Return rate plans that are sold though any of the specified channels",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Direct",
                "BookingCom",
                "Ibe",
                "ChannelManager",
                "Expedia",
                "Homelike",
                "Hrs",
                "AltoVita",
                "DesVu",
                "Gimsi"
              ]
            }
          },
          {
            "in": "query",
            "name": "promoCodes",
            "description": "Return rate plans that have any of the requested promo codes",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "companyIds",
            "description": "Return rate plans filtered by requested companies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "baseRatePlanIds",
            "description": "Return rate plans derived from any of the specified rate plans",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "unitGroupIds",
            "description": "Return rate plans with any of the specified unit groups",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "timeSliceDefinitionIds",
            "description": "Return rate plans with any of the specified time slice definitions",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "unitGroupTypes",
            "description": "Return rate plans with any of the specified unit group types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "BedRoom",
                "MeetingRoom",
                "EventSpace",
                "ParkingLot",
                "Other"
              ]
            }
          },
          {
            "in": "query",
            "name": "timeSliceTemplate",
            "description": "The time slice template, defaults to \u0027over night\u0027",
            "type": "string",
            "enum": [
              "DayUse",
              "OverNight"
            ]
          },
          {
            "in": "query",
            "name": "minGuaranteeTypes",
            "description": "Return rate plans with any of the specified min guarantee types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "PM6Hold",
                "CreditCard",
                "Prepayment",
                "Company"
              ]
            }
          },
          {
            "in": "query",
            "name": "cancellationPolicyIds",
            "description": "Return rate plans with any of the specified cancellation policies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "noShowPolicyIds",
            "description": "Return rate plans with any of the specified no-show policies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "isDerived",
            "description": "Return only derived or base rate plans",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "derivationLevelFilter",
            "description": "This will filter rate plans based on their derivation level\u003Cbr /\u003EYou can provide an array of string expressions which all need to apply.\u003Cbr /\u003EEach expression has the form of \u0027OPERATION_VALUE\u0027 where VALUE needs to be of the valid format of the property type and OPERATION can be:\u003Cbr /\u003E\u0027eq\u0027 for equals\u003Cbr /\u003E\u0027neq\u0027 for not equals\u003Cbr /\u003E\u0027lt\u0027 for less than\u003Cbr /\u003E\u0027gt\u0027 for greater than\u003Cbr /\u003E\u0027lte\u0027 for less than or equals\u003Cbr /\u003E\u0027gte\u0027 for greater than or equals\u003Cbr /\u003EFor instance\u003Cbr /\u003E\u0027eq_5\u0027 would mean the value should equal 5\u003Cbr /\u003E\u0027lte_7\u0027 would mean the value should be less than or equal to 7",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "includeArchived",
            "description": "Return archived rate plans. Defaults to false",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "marketSegmentIds",
            "description": "Filter result by requested market segments.\nYou can use the URL-encoded null symbol (%00)\nto search for rate plans that have no market segment set.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: property, unitGroup, cancellationPolicy, services, bookingPeriods, surcharges, ageCategories. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "property",
                "unitGroup",
                "cancellationPolicy",
                "services",
                "bookingPeriods",
                "surcharges",
                "ageCategories"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return all rate plans available within the client scopes.",
            "schema": {
              "$ref": "#/definitions/RatePlanListModel"
            }
          },
          "204": {
            "description": "There are no rate plans found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Create a rate plan",
        "description": "Use this call to create a new rate plan. The rate plan will already contain empty rates, fill them later using PUT rates.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.create, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.create\u0027.",
        "operationId": "RateplanRate-plansPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the rate plan.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateRatePlanModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Creation of the new rate plan was successful.",
            "schema": {
              "$ref": "#/definitions/RatePlanCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.create",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Allows to patch one or more rate plans",
        "description": "Here is the list of operations that are currently allowed:\n- Replace Name\n- Replace Description\n- Replace MinGuaranteeType\n- Replace PriceCalculationMode\n- Replace CancellationPolicy\n- Replace NoShowPolicy\n- Replace ChannelCodes\n- Replace Companies\n- Add, replace and remove PromoCode\n- Add, replace and remove Restrictions\n- Add, replace and remove BookingPeriods\n- Add, replace and remove IsSubjectToCityTax\n- Add, replace and remove PricingRule\n- Add, replace and remove Surcharges\n- Add, replace and remove AgeCategories\n- Add, replace and remove IncludedServices\n- Add/Replace/Remove/Update AccountingConfigs\n- Add, replace and remove MarketSegment/Id\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.modify\u0027.",
        "operationId": "RateplanRate-plansPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "Comma separated list of rate plan IDs, at least one.",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Rate plans were successfully modified."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Delete multiple rate plans",
        "description": "Use this call to delete multiple rate plans.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.delete, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.delete\u0027.",
        "operationId": "RateplanRate-plansDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "Comma separated list of rate plan IDs, at least one.",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the rate plans was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.delete",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans/$count": {
      "get": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Returns number of rate plans",
        "description": "Returns number of rate plans matching the filter criteria, and depending on client scopes\n\n\n            \nIf a client has no additional scopes, only public rate plans are counted.\n\nThe \u0027rateplans.read-corporate\u0027 scope adds corporate rate plans to the result number.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plans$countGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Return rate plans for the specific property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "ratePlanCodes",
            "description": "Return rate plans filtered by requested codes",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "includedServiceIds",
            "description": "Return rate plans that have any of the requested included services",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "channelCodes",
            "description": "Return rate plans that are sold though any of the specified channels",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Direct",
                "BookingCom",
                "Ibe",
                "ChannelManager",
                "Expedia",
                "Homelike",
                "Hrs",
                "AltoVita",
                "DesVu",
                "Gimsi"
              ]
            }
          },
          {
            "in": "query",
            "name": "promoCodes",
            "description": "Return rate plans that have any of the requested promo codes",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "companyIds",
            "description": "Return rate plans filtered by requested companies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "baseRatePlanIds",
            "description": "Return rate plans derived from any of the specified rate plans",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "unitGroupIds",
            "description": "Return rate plans with any of the specified unit groups",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "timeSliceDefinitionIds",
            "description": "Return rate plans with any of the specified time slice definitions",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "unitGroupTypes",
            "description": "Return rate plans with any of the specified unit group types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "BedRoom",
                "MeetingRoom",
                "EventSpace",
                "ParkingLot",
                "Other"
              ]
            }
          },
          {
            "in": "query",
            "name": "timeSliceTemplate",
            "description": "The time slice template, defaults to \u0027over night\u0027",
            "type": "string",
            "enum": [
              "DayUse",
              "OverNight"
            ]
          },
          {
            "in": "query",
            "name": "minGuaranteeTypes",
            "description": "Return rate plans with any of the specified min guarantee types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "PM6Hold",
                "CreditCard",
                "Prepayment",
                "Company"
              ]
            }
          },
          {
            "in": "query",
            "name": "cancellationPolicyIds",
            "description": "Return rate plans with any of the specified cancellation policies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "noShowPolicyIds",
            "description": "Return rate plans with any of the specified no-show policies",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "isDerived",
            "description": "Return only derived or base rate plans",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "derivationLevelFilter",
            "description": "This will filter rate plans based on their derivation level\u003Cbr /\u003EYou can provide an array of string expressions which all need to apply.\u003Cbr /\u003EEach expression has the form of \u0027OPERATION_VALUE\u0027 where VALUE needs to be of the valid format of the property type and OPERATION can be:\u003Cbr /\u003E\u0027eq\u0027 for equals\u003Cbr /\u003E\u0027neq\u0027 for not equals\u003Cbr /\u003E\u0027lt\u0027 for less than\u003Cbr /\u003E\u0027gt\u0027 for greater than\u003Cbr /\u003E\u0027lte\u0027 for less than or equals\u003Cbr /\u003E\u0027gte\u0027 for greater than or equals\u003Cbr /\u003EFor instance\u003Cbr /\u003E\u0027eq_5\u0027 would mean the value should equal 5\u003Cbr /\u003E\u0027lte_7\u0027 would mean the value should be less than or equal to 7",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "includeArchived",
            "description": "Return archived rate plans. Defaults to false",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "marketSegmentIds",
            "description": "Filter result by requested market segments.\nYou can use the URL-encoded null symbol (%00)\nto search for rate plans that have no market segment set.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/CountModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans/{id}": {
      "head": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Check if a rate plan exists",
        "description": "Check if a rate plan exists by id.\n\n\n            \nTo be able to check if a corporate rate plan exists\na client must additionaly have \u0027rateplans.read-corporate\u0027 scope assigned.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plansByIdHead",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The rate plan exists."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Get a rate plan",
        "description": "Get a rate plan by id.\n\n\n            \nTo be able to read a corporate rate plan a client must additionaly have\n\u0027rateplans.read-corporate\u0027 scope assigned.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plansByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: property, cancellationPolicy. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "property",
                "cancellationPolicy"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return all the rate plan data.",
            "schema": {
              "$ref": "#/definitions/RatePlanModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Replace a rate plan",
        "description": "Use this call to modify a rate plan.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.modify\u0027.",
        "operationId": "RateplanRate-plansByIdPut",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the rate plan.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ReplaceRatePlanModel"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Replace of the rate plan was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "RatePlan"
        ],
        "summary": "Delete a rate plan",
        "description": "Use this call to delete a rate plan.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.delete, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.delete\u0027.",
        "operationId": "RateplanRate-plansByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the rate plan was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.delete",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plan-actions/{id}/archive": {
      "put": {
        "tags": [
          "RatePlanActions"
        ],
        "summary": "Archive a rate plan",
        "description": "Archive the specific rate plan.\nThis action makes rate plan unavailable for all operations and cannot be undone.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.archive\u0027.",
        "operationId": "RateplanRate-plan-actionsByIdArchivePut",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "Id of the rate plan that should be archived.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Confirmation of the operation was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plan-actions/{id}/schedules/{scheduleId}": {
      "put": {
        "tags": [
          "RatePlanActions"
        ],
        "summary": "Attach a schedule to a rate plan with a cancellation policy.",
        "description": "Creates or updates the attachment for the given rate plan and schedule.\nA repeat call with the same rate plan and schedule repoints the cancellation policy.\nRejected when the schedule range is entirely in the past (property-local today).\nOverlapping policy-bearing schedules on the same rate plan are rejected.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.modify\u0027.",
        "operationId": "RateplanRate-plan-actionsByIdSchedulesByScheduleIdPut",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "scheduleId",
            "description": "The id of the schedule.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The cancellation policy to apply over the schedule period.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AttachRatePlanScheduleModel"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Attachment successfully created or updated.",
            "schema": {
              "$ref": "#/definitions/RatePlanScheduleModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "RatePlanActions"
        ],
        "summary": "Detach a schedule from a rate plan.",
        "description": "Removes the attachment so the rate plan\u0027s default cancellation policy covers the schedule period again.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.modify\u0027.",
        "operationId": "RateplanRate-plan-actionsByIdSchedulesByScheduleIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "scheduleId",
            "description": "The id of the schedule.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Detachment was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plans/{id}/schedules": {
      "get": {
        "tags": [
          "RatePlanSchedules"
        ],
        "summary": "Get the schedules attached to a rate plan.",
        "description": "Returns the rate plan\u0027s default cancellation policy and every attached schedule,\nincluding the period and the applied policy terms.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plansByIdSchedulesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the rate plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The rate plan default and attached schedules.",
            "schema": {
              "$ref": "#/definitions/RatePlanAttachedSchedulesModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/rate-plan-schedules": {
      "get": {
        "tags": [
          "RatePlanSchedules"
        ],
        "summary": "Get the schedules attached to multiple rate plans.",
        "description": "Returns the attached schedules for the given rate plan ids, so the rate plans list can load\nexception names, dates, and cancellation policy names in a single call. Rate plans without\nattached schedules are omitted. At most 50 rate plan ids can be specified.\u003Cbr\u003EYou must have at least one of these scopes: \u0027rateplans.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.rate_plans.read\u0027.",
        "operationId": "RateplanRate-plan-schedulesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "ratePlanIds",
            "description": "The rate plan ids. At most 50 ids can be specified.",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The attached schedules for the requested rate plans.",
            "schema": {
              "$ref": "#/definitions/BatchRatePlanScheduleListModel"
            }
          },
          "204": {
            "description": "None of the requested rate plans have attached schedules."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "rateplans.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/schedules": {
      "post": {
        "tags": [
          "Schedule"
        ],
        "summary": "Create a schedule.",
        "description": "Create a reusable schedule.\nRejected when the range is entirely in the past (property-local today).\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.schedules.create\u0027.",
        "operationId": "RateplanSchedulesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the schedule.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateScheduleModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Schedule successfully created.",
            "schema": {
              "$ref": "#/definitions/ScheduleCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Schedule"
        ],
        "summary": "Get all schedules.",
        "description": "Get the list of schedules.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.schedules.read\u0027.",
        "operationId": "RateplanSchedulesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter schedules by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "from",
            "description": "Return schedules that overlap this inclusive start date. Omit together with Apaleo.Api.Modules.RatePlan.Models.Schedules.ScheduleListRequest.To to return all schedules.",
            "type": "string",
            "format": "date"
          },
          {
            "in": "query",
            "name": "to",
            "description": "Return schedules that overlap this inclusive end date. Omit together with Apaleo.Api.Modules.RatePlan.Models.Schedules.ScheduleListRequest.From to return all schedules.",
            "type": "string",
            "format": "date"
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ScheduleListModel"
            }
          },
          "204": {
            "description": "No schedules could be found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/schedules/{id}": {
      "get": {
        "tags": [
          "Schedule"
        ],
        "summary": "Get a specific schedule.",
        "description": "Get a specific schedule.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.schedules.read\u0027.",
        "operationId": "RateplanSchedulesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the schedule.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ScheduleModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Schedule"
        ],
        "summary": "Allows to modify properties of a schedule",
        "description": "Here is the list of operations that are currently allowed:\n- Replace the name\n- Replace the valid from and valid to dates\nRejected when the current or new range is entirely in the past (property-local today).\nEditing dates is rejected when the new range would overlap another\npolicy-bearing schedule attached to any rate plan that uses this schedule.\u003Cbr\u003EYou must have at least one of these scopes: \u0027settings.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.schedules.modify\u0027.",
        "operationId": "RateplanSchedulesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the schedule to be modified.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success"
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "settings.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Schedule"
        ],
        "summary": "Delete a schedule",
        "description": "Use this call to delete a schedule. Rejected while the schedule is attached to any rate plan.\u003Cbr\u003EYou must have this scope: \u0027setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.schedules.delete\u0027.",
        "operationId": "RateplanSchedulesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the schedule.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the schedule was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/services": {
      "post": {
        "tags": [
          "Service"
        ],
        "summary": "Create a service.",
        "description": "Create a service.\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.create, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.create\u0027.",
        "operationId": "RateplanServicesPost",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe\u0027ll always send back the same response for requests made with the same key, \nand keys can\u0027t be reused with different request parameters. Keys expire after 24 hours.",
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the service.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateServiceModel"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Service successfully created.",
            "schema": {
              "$ref": "#/definitions/ServiceCreatedModel"
            },
            "headers": {
              "Location": {
                "description": "The location of the created resource.",
                "type": "string"
              }
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.create",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Service"
        ],
        "summary": "Get all services.",
        "description": "Get the list of services.\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.read\u0027.",
        "operationId": "RateplanServicesGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter services by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "textSearch",
            "description": "This will filter all services for the provided free text.\nCurrently it only looks up if the service name contains one of the provided values.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "onlySoldAsExtras",
            "description": "If set to true, return only services that can be sold as extras. Otherwise, it returns both, extras, and include-only.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "channelCodes",
            "description": "The channel codes the service is sold through",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Direct",
                "BookingCom",
                "Ibe",
                "ChannelManager",
                "Expedia",
                "Homelike",
                "Hrs",
                "AltoVita",
                "DesVu",
                "Gimsi"
              ]
            }
          },
          {
            "in": "query",
            "name": "serviceTypes",
            "description": "The service types offered",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Other",
                "Accommodation",
                "FoodAndBeverages"
              ]
            }
          },
          {
            "in": "query",
            "name": "pageNumber",
            "description": "Page number to retrieve. Default: 1. If the page has no items, the API returns 204 No Content.",
            "type": "integer",
            "default": 1
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "Items per page. Default: 500. Maximum: 500.",
            "type": "integer",
            "default": 500
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: property. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "property"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ServiceListModel"
            }
          },
          "204": {
            "description": "No services could be found."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/services/{id}": {
      "patch": {
        "tags": [
          "Service"
        ],
        "summary": "Modify a service.",
        "description": "Here is the list of operations that are currently allowed:\n- Replace Name\n- Replace Description\n- Replace DefaultGrossPrice\n- Replace PricingUnit\n- Replace PostNextDay\n- Replace Availability\n- Add/Replace/Remove/Update AccountingConfigs\n- Replace ChannelCodes\n- Replace AgeCategoryId\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.manage, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.modify\u0027.",
        "operationId": "RateplanServicesByIdPatch",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the service.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "Define the list of operations to be applied to the resource. Learn more about JSON Patch here: http://jsonpatch.com/.",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Operation"
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The service was successfully modified."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "415": {
            "description": "Unsupported media type."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.manage",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Service"
        ],
        "summary": "Get a specific service.",
        "description": "Get a specific service.\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.read\u0027.",
        "operationId": "RateplanServicesByIdGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the service.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "languages",
            "description": "\u0027all\u0027 or comma separated list of two-letter language codes (ISO Alpha-2)",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "expand",
            "description": "List of all embedded resources that should be expanded in the response. Possible values are: property. All other values will be silently ignored.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "property"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "schema": {
              "$ref": "#/definitions/ServiceModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "head": {
        "tags": [
          "Service"
        ],
        "summary": "Check if a service exists",
        "description": "Check if a service exists by id.\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.read\u0027.",
        "operationId": "RateplanServicesByIdHead",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the service.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The service exists."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          }
        },
        "security": [
          {
            "oauth2": [
              "services.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Service"
        ],
        "summary": "Delete a service",
        "description": "Use this call to delete a service.\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.create, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.delete\u0027.",
        "operationId": "RateplanServicesByIdDelete",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The id of the service.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deletion of the service was successful."
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.create",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    },
    "/rateplan/v0-nsfw/services/$count": {
      "get": {
        "tags": [
          "Service"
        ],
        "summary": "Returns number of services.",
        "description": "Returns number of services\u003Cbr\u003EYou must have at least one of these scopes: \u0027services.read, setup.read, setup.manage\u0027.\u003Cbr\u003EFor fine-grained clients, you must have this permission: \u0027core.services.read\u0027.",
        "operationId": "RateplanServices$countGet",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "propertyId",
            "description": "Filter services by the specified property",
            "type": "string"
          },
          {
            "in": "query",
            "name": "textSearch",
            "description": "This will filter all services for the provided free text.\nCurrently it only looks up if the service name contains one of the provided values.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "onlySoldAsExtras",
            "description": "If set to true, return only services that can be sold as extras. Otherwise, it returns both, extras, and include-only.",
            "type": "boolean"
          },
          {
            "in": "query",
            "name": "channelCodes",
            "description": "The channel codes the service is sold through",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Direct",
                "BookingCom",
                "Ibe",
                "ChannelManager",
                "Expedia",
                "Homelike",
                "Hrs",
                "AltoVita",
                "DesVu",
                "Gimsi"
              ]
            }
          },
          {
            "in": "query",
            "name": "serviceTypes",
            "description": "The service types offered",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "Other",
                "Accommodation",
                "FoodAndBeverages"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/CountModel"
            }
          },
          "404": {
            "description": "The Request-URI could not be found."
          },
          "400": {
            "description": "Bad request."
          },
          "401": {
            "description": "You are unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "499": {
            "description": "Client closed request."
          },
          "500": {
            "description": "An unexpected error occurred."
          },
          "503": {
            "description": "The server is currently unavailable. Please try later."
          },
          "422": {
            "description": "Validation errors in the request body or query params.",
            "schema": {
              "$ref": "#/definitions/MessageItemCollection"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "services.read",
              "setup.read",
              "setup.manage",
              "admin"
            ]
          }
        ]
      }
    }
  },
  "definitions": {
    "AccountingConfigModel": {
      "type": "object",
      "required": [
        "serviceType",
        "validFrom",
        "vatType"
      ],
      "properties": {
        "vatType": {
          "type": "string",
          "description": "The VAT type",
          "enum": [
            "Null",
            "VeryReduced",
            "Reduced",
            "Normal",
            "Without",
            "Special",
            "Special1",
            "Special2",
            "ReducedCovid19",
            "NormalCovid19",
            "Mixed"
          ]
        },
        "serviceType": {
          "type": "string",
          "description": "The service type",
          "enum": [
            "Other",
            "Accommodation",
            "FoodAndBeverages"
          ]
        },
        "subAccountId": {
          "type": "string",
          "description": "The sub-accounts id",
          "x-nullable": true
        },
        "validFrom": {
          "type": "string",
          "description": "Which date this configuration is valid from",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false,
      "example": {
        "state": "Unknown",
        "vatType": "Normal",
        "serviceType": "FoodAndBeverages",
        "subAccountId": "ALCO",
        "validFrom": "2021-01-01"
      }
    },
    "AddressModel": {
      "type": "object",
      "required": [
        "addressLine1",
        "city",
        "countryCode",
        "postalCode"
      ],
      "properties": {
        "addressLine1": {
          "type": "string",
          "minLength": 1
        },
        "addressLine2": {
          "type": "string",
          "x-nullable": true
        },
        "postalCode": {
          "type": "string",
          "minLength": 1
        },
        "city": {
          "type": "string",
          "minLength": 1
        },
        "regionCode": {
          "type": "string",
          "x-nullable": true
        },
        "countryCode": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "AgeCategoryCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The age category id"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-BABY"
      }
    },
    "AgeCategoryItemModel": {
      "type": "object",
      "required": [
        "code",
        "id",
        "maxAge",
        "minAge",
        "name",
        "propertyId"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The age category id"
        },
        "code": {
          "type": "string",
          "description": "The code for the age category"
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property for which the age category will be created"
        },
        "name": {
          "type": "string",
          "description": "The name for the age category",
          "minLength": 1
        },
        "minAge": {
          "type": "integer",
          "description": "The minimum age for the age category. The specified value is included in the age range",
          "format": "int32"
        },
        "maxAge": {
          "type": "integer",
          "description": "The maximum age for the age category. The specified value is included in the age range",
          "format": "int32"
        }
      },
      "additionalProperties": false
    },
    "AgeCategoryListModel": {
      "type": "object",
      "required": [
        "ageCategories",
        "count"
      ],
      "properties": {
        "ageCategories": {
          "type": "array",
          "description": "List of age categories",
          "items": {
            "$ref": "#/definitions/AgeCategoryItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "ageCategories": [
          {
            "id": "MUC-BABY",
            "code": "BABY",
            "propertyId": "MUC",
            "name": "Baby",
            "minAge": 0,
            "maxAge": 1
          },
          {
            "id": "MUC-CHILD",
            "code": "CHILD",
            "propertyId": "PROP ID",
            "name": "Child",
            "minAge": 2,
            "maxAge": 12
          }
        ],
        "count": 2
      }
    },
    "AgeCategoryModel": {
      "type": "object",
      "required": [
        "code",
        "id",
        "maxAge",
        "minAge",
        "name",
        "propertyId"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The age category id"
        },
        "code": {
          "type": "string",
          "description": "The code for the age category"
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property for which the age category will be created"
        },
        "name": {
          "type": "object",
          "description": "The name for the age category",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "minAge": {
          "type": "integer",
          "description": "The minimum age for the age category. The specified value is included in the age range",
          "format": "int32"
        },
        "maxAge": {
          "type": "integer",
          "description": "The maximum age for the age category. The specified value is included in the age range",
          "format": "int32"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-BABY",
        "code": "BABY",
        "propertyId": "MUC",
        "name": {
          "en": "Baby"
        },
        "minAge": 0,
        "maxAge": 1
      }
    },
    "AgeCategorySurchargeModel": {
      "type": "object",
      "required": [
        "adults",
        "value"
      ],
      "properties": {
        "adults": {
          "type": "integer",
          "description": "The number of adults",
          "format": "int32"
        },
        "value": {
          "type": "number",
          "description": "The absolute value in the currency of the rate plan as surcharge for each child accompanied by the given number of \u0027adults\u0027.\nThe minimum value is 0.",
          "format": "double",
          "maximum": 2147483647,
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "AttachRatePlanScheduleModel": {
      "type": "object",
      "required": [
        "cancellationPolicyId"
      ],
      "properties": {
        "cancellationPolicyId": {
          "type": "string",
          "description": "The id of the cancellation policy that applies to the rate plan over the schedule period"
        }
      },
      "additionalProperties": false,
      "example": {
        "cancellationPolicyId": "MUC-STRICT"
      }
    },
    "AvailabilityModel": {
      "type": "object",
      "required": [
        "mode"
      ],
      "properties": {
        "mode": {
          "type": "string",
          "description": "You can choose if the service will only be offered\nfor the arrival or departure time slice like early check-in or a final cleaning service. You can also define\na service that is available to be booked for the whole stay. The property defaults to \u0027Daily\u0027.",
          "enum": [
            "Arrival",
            "Departure",
            "Daily"
          ]
        },
        "quantity": {
          "type": "integer",
          "description": "Quota/Limit for service. By default service is unlimited.",
          "format": "int32",
          "x-nullable": true
        },
        "daysOfWeek": {
          "type": "array",
          "description": "You can choose if the service should be available for specific days of the week",
          "items": {
            "type": "string",
            "enum": [
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday",
              "Sunday"
            ]
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "BatchRateItemModel": {
      "type": "object",
      "required": [
        "from",
        "ratePlanId",
        "to"
      ],
      "properties": {
        "ratePlanId": {
          "type": "string",
          "description": "The rate plan id",
          "minLength": 1
        },
        "from": {
          "type": "string",
          "description": "Date and time the rate begins\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "to": {
          "type": "string",
          "description": "Date and time the rate ends\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "price": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "includedServicesPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "calculatedPrices": {
          "type": "array",
          "description": "A list of prices for occupancies 2 or higher. Only set, if the rate plan defines surcharges for different occupancies",
          "items": {
            "$ref": "#/definitions/CalculatedRateModel"
          },
          "x-nullable": true
        },
        "restrictions": {
          "$ref": "#/definitions/RateRestrictionsModel"
        }
      },
      "additionalProperties": false
    },
    "BatchRateListModel": {
      "type": "object",
      "required": [
        "count",
        "rates"
      ],
      "properties": {
        "rates": {
          "type": "array",
          "description": "List of rates",
          "items": {
            "$ref": "#/definitions/BatchRateItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "rates": [
          {
            "ratePlanId": "MUC-NONREF_SGL",
            "from": "2026-11-02T17:00:00\u002B01:00",
            "to": "2026-11-03T11:00:00\u002B01:00",
            "price": {
              "amount": 100.0,
              "currency": "EUR"
            },
            "restrictions": {
              "closed": false,
              "closedOnArrival": false,
              "closedOnDeparture": false
            }
          },
          {
            "ratePlanId": "MUC-NONREF_DBL",
            "from": "2026-11-02T17:00:00\u002B01:00",
            "to": "2026-11-03T11:00:00\u002B01:00",
            "price": {
              "amount": 123.0,
              "currency": "EUR"
            },
            "calculatedPrices": [
              {
                "adults": 2,
                "price": {
                  "amount": 133.0,
                  "currency": "EUR"
                }
              }
            ],
            "restrictions": {
              "minLengthOfStay": 2,
              "maxLengthOfStay": 30,
              "closed": false,
              "closedOnArrival": true,
              "closedOnDeparture": true
            }
          }
        ],
        "count": 0
      }
    },
    "BatchRatePlanScheduleCancellationPolicyModel": {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The cancellation policy id"
        },
        "name": {
          "type": "string",
          "description": "The name for the cancellation policy",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "BatchRatePlanScheduleItemModel": {
      "type": "object",
      "required": [
        "cancellationPolicy",
        "id",
        "name",
        "ratePlanId",
        "validFrom",
        "validTo"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The schedule id"
        },
        "name": {
          "type": "string",
          "description": "The name for the schedule",
          "minLength": 1
        },
        "validFrom": {
          "type": "string",
          "description": "The first arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "validTo": {
          "type": "string",
          "description": "The last arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "ratePlanId": {
          "type": "string",
          "description": "The id of the rate plan the schedule is attached to"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/BatchRatePlanScheduleCancellationPolicyModel"
        }
      },
      "additionalProperties": false
    },
    "BatchRatePlanScheduleListModel": {
      "type": "object",
      "required": [
        "count",
        "schedules"
      ],
      "properties": {
        "schedules": {
          "type": "array",
          "description": "Schedules attached to the requested rate plans. Rate plans without attached schedules are omitted.",
          "items": {
            "$ref": "#/definitions/BatchRatePlanScheduleItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "schedules": [
          {
            "id": "MUC-WIESN2026",
            "name": "Oktoberfest 2026",
            "validFrom": "2026-09-20",
            "validTo": "2026-10-05",
            "ratePlanId": "MUC-BAR",
            "cancellationPolicy": {
              "id": "MUC-STR",
              "name": "Strict"
            }
          }
        ],
        "count": 1
      }
    },
    "BookingPeriodModel": {
      "type": "object",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "Start of booking period\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "to": {
          "type": "string",
          "description": "End of booking period\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        }
      },
      "additionalProperties": false
    },
    "BookingRestrictionsModel": {
      "type": "object",
      "properties": {
        "minAdvance": {
          "$ref": "#/definitions/PeriodModel"
        },
        "maxAdvance": {
          "$ref": "#/definitions/PeriodModel"
        },
        "lateBookingUntil": {
          "type": "string",
          "description": "Time of day until the late booking can be made for this rate plan\nRestrictions:\n- the time has to be between the check-in (excl.) and check-out time (excl.)\n- can only be set, if MinAdvance is not set\u003Cbr /\u003EA time as defined in the \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "CalculatedRateModel": {
      "type": "object",
      "required": [
        "adults",
        "price"
      ],
      "properties": {
        "adults": {
          "type": "integer",
          "description": "Number of adults this rate is valid for",
          "format": "int32"
        },
        "price": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "includedServicesPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        }
      },
      "additionalProperties": false
    },
    "CancellationPolicyCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The cancellation policy ID"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-FLE"
      }
    },
    "CancellationPolicyItemModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "id",
        "name",
        "periodFromReference",
        "propertyId",
        "reference"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Id"
        },
        "name": {
          "type": "string",
          "description": "Name",
          "minLength": 1
        },
        "code": {
          "type": "string",
          "description": "The code for the cancellation policy"
        },
        "description": {
          "type": "string",
          "description": "Description",
          "minLength": 1
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the cancellation policy was created"
        },
        "periodFromReference": {
          "$ref": "#/definitions/PeriodModel"
        },
        "reference": {
          "type": "string",
          "description": "The due date for the cancellation policy will be calculated based on this reference point, and the defined time period.\n\n\n\nExamples:\n\n- 1 day and 12 hours prior to arrival\n\n- 0 prior to arrival (meaning, cancellations are always free)\n\n- 24 hours after booking\n\n- 0 after booking (meaning, cancellations ar never free)",
          "enum": [
            "PriorToArrival",
            "AfterBooking"
          ]
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false
    },
    "CancellationPolicyListModel": {
      "type": "object",
      "required": [
        "cancellationPolicies",
        "count"
      ],
      "properties": {
        "cancellationPolicies": {
          "type": "array",
          "description": "List of cancellation policies",
          "items": {
            "$ref": "#/definitions/CancellationPolicyItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "cancellationPolicies": [
          {
            "id": "MUC-FLEX",
            "name": "Flexible",
            "code": "FLEX",
            "description": "Free cancellation until 36 hours before arrival.",
            "propertyId": "MUC",
            "periodFromReference": {
              "hours": 12,
              "days": 1,
              "months": 0
            },
            "reference": "PriorToArrival",
            "fee": {
              "vatType": "Reduced",
              "fixedValue": {
                "amount": 100.0,
                "currency": "EUR"
              }
            }
          },
          {
            "id": "BER-NONREF",
            "name": "Non Refundable",
            "code": "NONREF",
            "description": "25% refund up until 1 week prior to arrival.",
            "propertyId": "BER",
            "periodFromReference": {
              "hours": 0,
              "days": 0,
              "months": 0
            },
            "reference": "AfterBooking",
            "fee": {
              "vatType": "Reduced",
              "percentValue": {
                "percent": 100,
                "limit": 1,
                "includeServiceIds": [
                  "MUC-BRK"
                ]
              }
            }
          }
        ],
        "count": 2
      }
    },
    "CancellationPolicyModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "id",
        "name",
        "periodFromReference",
        "propertyId",
        "reference"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The cancellation policy id"
        },
        "code": {
          "type": "string",
          "description": "The code for the policy",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "object",
          "description": "The name for the cancellation policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the cancellation policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the cancellation policy was created"
        },
        "periodFromReference": {
          "$ref": "#/definitions/PeriodModel"
        },
        "reference": {
          "type": "string",
          "description": "The due date for the cancellation policy will be calculated based on this reference point, and the defined time period.\n\n\n\nExamples:\n\n- 1 day and 12 hours prior to arrival\n\n- 0 prior to arrival (meaning, cancellations are always free)\n\n- 24 hours after booking\n\n- 0 after booking (meaning, cancellations ar never free)",
          "enum": [
            "PriorToArrival",
            "AfterBooking"
          ]
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-FLE",
        "code": "FLE",
        "name": {
          "en": "Flexible",
          "de": "Flexibel"
        },
        "description": {
          "en": "Free cancellation until 36 hours before arrival.",
          "de": "Kostenfreies Storno bis 36 Stunden vor Ankunft."
        },
        "propertyId": "MUC",
        "periodFromReference": {
          "hours": 12,
          "days": 1
        },
        "reference": "PriorToArrival",
        "fee": {
          "vatType": "Reduced",
          "percentValue": {
            "percent": 100,
            "limit": 1,
            "includeServiceIds": [
              "MUC-BRK"
            ]
          }
        }
      }
    },
    "CompanyAddressModel": {
      "type": "object",
      "required": [
        "addressLine1",
        "city",
        "countryCode",
        "postalCode"
      ],
      "properties": {
        "addressLine1": {
          "type": "string",
          "minLength": 1
        },
        "addressLine2": {
          "type": "string",
          "x-nullable": true
        },
        "postalCode": {
          "type": "string",
          "minLength": 1
        },
        "city": {
          "type": "string",
          "minLength": 1
        },
        "regionCode": {
          "type": "string",
          "x-nullable": true
        },
        "countryCode": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CompanyCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The company ID"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-UMBRELLA"
      }
    },
    "CompanyIdentifierModel": {
      "type": "object",
      "required": [
        "scheme",
        "value"
      ],
      "properties": {
        "scheme": {
          "type": "string",
          "description": "The identifier scheme (must exist in the company identifier-scheme registry).",
          "maxLength": 50,
          "minLength": 1
        },
        "value": {
          "type": "string",
          "description": "The identifier value for the scheme.",
          "maxLength": 50,
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "CompanyListModel": {
      "type": "object",
      "description": "The unstable (v0-nsfw) variant of Apaleo.Api.Modules.RatePlan.Models.Companies.CompanyListModel.",
      "required": [
        "companies",
        "count"
      ],
      "properties": {
        "companies": {
          "type": "array",
          "description": "List of companies",
          "items": {
            "$ref": "#/definitions/CompanyModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "companies": [
          {
            "identifiers": [
              {
                "scheme": "PEPPOL:0204",
                "value": "991-12345-37"
              }
            ],
            "type": "GovernmentBuyer",
            "id": "MUC-UMBRELLA",
            "code": "UMBRELLA",
            "propertyId": "MUC",
            "name": "Umbrella Corp.",
            "invoicingEmail": "umbrella@corp.com",
            "phone": "\u002B49 89 12345678",
            "taxId": "Tax 123456",
            "additionalTaxId": "123456789",
            "additionalTaxId2": "987654321",
            "invoiceNetworkIdentity": {
              "network": "Peppol",
              "id": "0208:123456789"
            },
            "address": {
              "addressLine1": "Marienplatz 1",
              "postalCode": "80331",
              "city": "M\u00FCnchen",
              "countryCode": "DE"
            },
            "canCheckOutOnAr": true,
            "ratePlans": [
              {
                "id": "MUC-DBL",
                "code": "DBL",
                "corporateCode": "UMBRELLAINC",
                "name": "Double room flexible"
              }
            ]
          }
        ],
        "count": 0
      }
    },
    "CompanyModel": {
      "type": "object",
      "description": "The unstable (v0-nsfw) variant of Apaleo.Api.Modules.RatePlan.Models.Companies.CompanyModel.\nIt additionally exposes structured company identifiers.",
      "required": [
        "address",
        "canCheckOutOnAr",
        "code",
        "id",
        "name",
        "propertyId"
      ],
      "properties": {
        "identifiers": {
          "type": "array",
          "description": "Structured company identifiers. Only returned when requested via expand=identifiers.",
          "items": {
            "$ref": "#/definitions/CompanyIdentifierModel"
          },
          "x-nullable": true
        },
        "type": {
          "type": "string",
          "description": "The company type.",
          "enum": [
            "CorporateClient",
            "GovernmentBuyer"
          ],
          "x-nullable": true
        },
        "id": {
          "type": "string",
          "description": "The ID of this company"
        },
        "code": {
          "type": "string",
          "description": "The code for the company"
        },
        "propertyId": {
          "type": "string",
          "description": "The ID of the property"
        },
        "name": {
          "type": "string",
          "description": "The name of the company",
          "minLength": 1
        },
        "invoicingEmail": {
          "type": "string",
          "description": "The email address for invoicing purposes",
          "x-nullable": true
        },
        "phone": {
          "type": "string",
          "description": "The company\u0027s phone number",
          "x-nullable": true
        },
        "taxId": {
          "type": "string",
          "description": "The tax ID of the company",
          "x-nullable": true
        },
        "additionalTaxId": {
          "type": "string",
          "description": "The additional tax ID of the company (e.g. SIRET in France, Codice Destinatario in Italy, SST in Malaysia)",
          "x-nullable": true
        },
        "additionalTaxId2": {
          "type": "string",
          "description": "The additional tax ID of the company (e.g. Codice Fiscale in Italy, BRN in Malaysia)",
          "x-nullable": true
        },
        "invoiceNetworkIdentity": {
          "$ref": "#/definitions/InvoiceNetworkIdentityModel"
        },
        "address": {
          "$ref": "#/definitions/CompanyAddressModel"
        },
        "canCheckOutOnAr": {
          "type": "boolean",
          "description": "Whether or not the company is allowed to check out on AR / invoice"
        },
        "ratePlans": {
          "type": "array",
          "description": "Rate plans that can be booked by this company",
          "items": {
            "$ref": "#/definitions/RatePlanCompanyModel"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "identifiers": [
          {
            "scheme": "PEPPOL:0204",
            "value": "991-12345-37"
          }
        ],
        "type": "GovernmentBuyer",
        "id": "MUC-UMBRELLA",
        "code": "UMBRELLA",
        "propertyId": "MUC",
        "name": "Umbrella Corp.",
        "invoicingEmail": "umbrella@corp.com",
        "phone": "\u002B49 89 12345678",
        "taxId": "Tax 123456",
        "additionalTaxId": "123456789",
        "additionalTaxId2": "987654321",
        "invoiceNetworkIdentity": {
          "network": "Peppol",
          "id": "0208:123456789"
        },
        "address": {
          "addressLine1": "Marienplatz 1",
          "postalCode": "80331",
          "city": "M\u00FCnchen",
          "countryCode": "DE"
        },
        "canCheckOutOnAr": true,
        "ratePlans": [
          {
            "id": "MUC-DBL",
            "code": "DBL",
            "corporateCode": "UMBRELLAINC",
            "name": "Double room flexible"
          }
        ]
      }
    },
    "CompanyRatePlanModel": {
      "type": "object",
      "required": [
        "code",
        "corporateCode",
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Company ID that can use this rate plan"
        },
        "code": {
          "type": "string",
          "description": "The code of the company that can book this rate plan"
        },
        "corporateCode": {
          "type": "string",
          "description": "Company rate plan code, identifying the company \u002B rate plan pair. Is used is offers."
        },
        "name": {
          "type": "string",
          "description": "The name of the company that can book this rate plan",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "CorporateCodeListModel": {
      "type": "object",
      "required": [
        "corporateCodes",
        "count"
      ],
      "properties": {
        "corporateCodes": {
          "type": "array",
          "description": "List of existing corporate codes",
          "items": {
            "$ref": "#/definitions/CorporateCodeModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "corporateCodes": [
          {
            "code": "APALEO-NONREF",
            "companyId": "MUC-UMBRELLA",
            "companyCode": "UMBRELLA",
            "companyName": "Umbrella Corp.",
            "ratePlanId": "RP-APALEO-NONREF"
          }
        ],
        "count": 1
      }
    },
    "CorporateCodeModel": {
      "type": "object",
      "required": [
        "code",
        "companyCode",
        "companyId",
        "companyName",
        "ratePlanId"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The corporate rate code"
        },
        "companyId": {
          "type": "string",
          "description": "The company ID"
        },
        "companyCode": {
          "type": "string",
          "description": "The company code"
        },
        "companyName": {
          "type": "string",
          "description": "The company name",
          "minLength": 1
        },
        "ratePlanId": {
          "type": "string",
          "description": "The rate plan ID"
        }
      },
      "additionalProperties": false
    },
    "CountModel": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "count": 50
      }
    },
    "CreateAgeCategoryModel": {
      "type": "object",
      "required": [
        "code",
        "maxAge",
        "minAge",
        "name",
        "propertyId"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the age category",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property for which the age category will be created"
        },
        "name": {
          "type": "object",
          "description": "The name for the age category",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "minAge": {
          "type": "integer",
          "description": "The minimum age for the age category. The specified value is included in the age range",
          "format": "int32",
          "maximum": 17,
          "minimum": 0
        },
        "maxAge": {
          "type": "integer",
          "description": "The maximum age for the age category. The specified value is included in the age range and the maximum value\nis 17",
          "format": "int32",
          "maximum": 17,
          "minimum": 0
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "BABY",
        "propertyId": "MUC",
        "name": {
          "en": "Baby",
          "de": "Kind"
        },
        "minAge": 0,
        "maxAge": 2
      }
    },
    "CreateCancellationPolicyModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "name",
        "propertyId",
        "reference"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the cancellation policy, used to assemble its id",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "object",
          "description": "The name for the cancellation policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the cancellation policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the cancellation policy will be created"
        },
        "periodFromReference": {
          "$ref": "#/definitions/PeriodModel"
        },
        "reference": {
          "type": "string",
          "description": "The due date for the cancellation policy will be calculated based on this reference point",
          "enum": [
            "PriorToArrival",
            "AfterBooking"
          ]
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "FLE",
        "name": {
          "en": "Flexible",
          "de": "Flexibel"
        },
        "description": {
          "en": "Free cancellation until 36 hours before arrival.",
          "de": "Kostenfreies Storno bis 36 Stunden vor Ankunft."
        },
        "propertyId": "MUC",
        "periodFromReference": {
          "hours": 12,
          "days": 1
        },
        "reference": "PriorToArrival",
        "fee": {
          "vatType": "Reduced",
          "percentValue": {
            "percent": 100,
            "limit": 1,
            "includeServiceIds": [
              "MUC-BRK"
            ]
          }
        }
      }
    },
    "CreateCompanyIdentifierModel": {
      "type": "object",
      "required": [
        "scheme",
        "value"
      ],
      "properties": {
        "scheme": {
          "type": "string",
          "description": "The identifier scheme (must exist in the company identifier-scheme registry).",
          "maxLength": 50,
          "minLength": 1
        },
        "value": {
          "type": "string",
          "description": "The identifier value for the scheme.",
          "maxLength": 50,
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "CreateCompanyModel": {
      "type": "object",
      "description": "The unstable (v0-nsfw) variant of Apaleo.Api.Modules.RatePlan.Models.Companies.CreateCompanyModel.\nIt additionally accepts structured company identifiers.",
      "required": [
        "address",
        "canCheckOutOnAr",
        "code",
        "name",
        "propertyId"
      ],
      "properties": {
        "identifiers": {
          "type": "array",
          "description": "Structured company identifiers. Only schemes from the identifier-scheme registry are accepted.",
          "items": {
            "$ref": "#/definitions/CreateCompanyIdentifierModel"
          },
          "x-nullable": true
        },
        "type": {
          "type": "string",
          "description": "The company type. Defaults to CorporateClient when omitted.",
          "enum": [
            "CorporateClient",
            "GovernmentBuyer"
          ],
          "x-nullable": true
        },
        "code": {
          "type": "string",
          "description": "The code for the company",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "propertyId": {
          "type": "string",
          "description": "The ID of the property"
        },
        "name": {
          "type": "string",
          "description": "The name of the company",
          "minLength": 1
        },
        "invoicingEmail": {
          "type": "string",
          "description": "The email address for invoicing purposes",
          "x-nullable": true
        },
        "phone": {
          "type": "string",
          "description": "The company\u0027s phone",
          "x-nullable": true
        },
        "taxId": {
          "type": "string",
          "description": "The tax ID of the company",
          "x-nullable": true
        },
        "additionalTaxId": {
          "type": "string",
          "description": "The additional tax ID of the company (e.g. SIRET in France, Codice Destinatario in Italy, SST in Malaysia)",
          "x-nullable": true
        },
        "additionalTaxId2": {
          "type": "string",
          "description": "The additional tax ID of the company (e.g. Codice Fiscale in Italy, BRN in Malaysia)",
          "x-nullable": true
        },
        "invoiceNetworkIdentity": {
          "$ref": "#/definitions/InvoiceNetworkIdentityModel"
        },
        "address": {
          "$ref": "#/definitions/AddressModel"
        },
        "canCheckOutOnAr": {
          "type": "boolean",
          "description": "Whether or not the company is allowed to check out on AR / invoice"
        },
        "ratePlans": {
          "type": "array",
          "description": "Rate plans that can be booked by this company",
          "items": {
            "$ref": "#/definitions/CreateRatePlanCompanyModel"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "identifiers": [
          {
            "scheme": "PEPPOL:0204",
            "value": "991-12345-37"
          }
        ],
        "type": "GovernmentBuyer",
        "code": "UMBRELLA",
        "propertyId": "MUC",
        "name": "Umbrella Corp.",
        "invoicingEmail": "umbrella@corp.com",
        "taxId": "Tax 123456",
        "additionalTaxId": "123456789",
        "additionalTaxId2": "987654321",
        "invoiceNetworkIdentity": {
          "network": "Peppol",
          "id": "0208:123456789"
        },
        "address": {
          "addressLine1": "Marienplatz 1",
          "postalCode": "80331",
          "city": "M\u00FCnchen",
          "countryCode": "DE"
        },
        "canCheckOutOnAr": true,
        "ratePlans": [
          {
            "id": "MUC-DBL",
            "corporateCode": "UMBRELLAINC"
          }
        ]
      }
    },
    "CreateCompanyRatePlanModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Company ID that can use this rate plan"
        },
        "corporateCode": {
          "type": "string",
          "description": "Optional rate plan code that is used by the company. Default is companyCode-ratePlanCode.\nSame code can be specified for several rate plans in one company.\nNo two companies can have a rate plan with the same code.",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "CreateNoShowPolicyModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "name",
        "propertyId"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the no-show policy, used to assemble its id",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "object",
          "description": "The name for the no-show policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the no-show policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the no-show policy will be created"
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "NONREF",
        "name": {
          "en": "No-Show Fee",
          "de": "No-Show Fee"
        },
        "description": {
          "en": "100% of the accommodation fees, for the complete stay.",
          "de": "100% of the accommodation fees, for the complete stay."
        },
        "propertyId": "MUC",
        "fee": {
          "vatType": "Null",
          "fixedValue": {
            "amount": 100.0,
            "currency": "EUR"
          }
        }
      }
    },
    "CreatePricingRuleModel": {
      "type": "object",
      "required": [
        "baseRatePlanId",
        "type",
        "value"
      ],
      "properties": {
        "baseRatePlanId": {
          "type": "string",
          "description": "The id of the rate plan that will be used as base when calculating the rates.\nThe derivation level of the rate plan used as base rate plan cannot be greater than 2"
        },
        "type": {
          "type": "string",
          "description": "The type used to control the calculation of the difference to the rates of the defined base\nrate plan",
          "enum": [
            "Absolute",
            "Percent"
          ]
        },
        "value": {
          "type": "number",
          "description": "The value used to control the calculation of the difference to the rates of the defined base\nrate plan. It can be a positive and a negative value. The system will prevent you to define\na value that would lead to negative rates",
          "format": "double"
        }
      },
      "additionalProperties": false
    },
    "CreateRatePlanCompanyModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Rate plan ID that is used by this company"
        },
        "corporateCode": {
          "type": "string",
          "description": "Optional rate plan code that is used by this company. Default is companyCode-ratePlanCode.\nSame code can be specified for several rate plans in one company.\nNo two companies can have a rate plan with the same code.",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "CreateRatePlanModel": {
      "type": "object",
      "required": [
        "cancellationPolicyId",
        "channelCodes",
        "code",
        "description",
        "minGuaranteeType",
        "name",
        "propertyId",
        "timeSliceDefinitionId",
        "unitGroupId"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the rate plan that can be shown in reports and table views",
          "maxLength": 20,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property for which the rate plan will be created"
        },
        "unitGroupId": {
          "type": "string",
          "description": "The id of the unit group offered with this rate plan"
        },
        "cancellationPolicyId": {
          "type": "string",
          "description": "The id of the cancellation policy valid for this rate plan"
        },
        "noShowPolicyId": {
          "type": "string",
          "description": "The id of the no-show policy valid for this rate plan",
          "x-nullable": true
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the rate plan is sold through",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          }
        },
        "promoCodes": {
          "type": "array",
          "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\nanymore and only be offered when one of the promo codes is given in the offer request.\nFor backward compatibility it is still not possible to set multiple promo codes.",
          "items": {
            "type": "string"
          },
          "x-nullable": true
        },
        "isSubjectToCityTax": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to city tax or not.\nDefault value is \u0060true\u0060",
          "x-nullable": true
        },
        "isYieldable": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to evaluation against hurdle rates when deciding on rate availability.\nDefault value is \u0060false\u0060",
          "x-nullable": true
        },
        "timeSliceDefinitionId": {
          "type": "string",
          "description": "Defines the time periods for which the unit group related to this rate plan is rented out"
        },
        "name": {
          "type": "object",
          "description": "The name for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "minGuaranteeType": {
          "type": "string",
          "description": "The minimum guarantee to be provided when this rate plan is booked so\nthe reservation will be guaranteed to the guest",
          "enum": [
            "PM6Hold",
            "CreditCard",
            "Prepayment",
            "Company"
          ]
        },
        "priceCalculationMode": {
          "type": "string",
          "description": "The calculation mode is used when calculating the adults\u0027 surcharges and derived rates.\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of \u002B10%,\nwhen Truncate is selected, the result would be 125.99 \u002B 12 = 137.99\nWhen Round is selected, the result would be 125.99 \u002B 12.60 = 138.59",
          "enum": [
            "Truncate",
            "Round"
          ],
          "x-nullable": true
        },
        "bookingPeriods": {
          "type": "array",
          "description": "Time periods when the rate plan is bookable",
          "items": {
            "$ref": "#/definitions/BookingPeriodModel"
          },
          "x-nullable": true
        },
        "restrictions": {
          "$ref": "#/definitions/BookingRestrictionsModel"
        },
        "pricingRule": {
          "$ref": "#/definitions/CreatePricingRuleModel"
        },
        "surcharges": {
          "type": "array",
          "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to\nthe manually defined or calculated derived rates.\nThe values for \u0027adults\u0027 must be unique within the list and starting from occupancy of 2 adults. Values higher than the maximum unit group occupancy will be silently ignored.\nThe surcharges are required for all possible occupancies defined by the \u0027MaxPersons\u0027 of the unit group.",
          "items": {
            "$ref": "#/definitions/SurchargeModel"
          },
          "x-nullable": true
        },
        "ageCategories": {
          "type": "array",
          "description": "Additional charges per age category.",
          "items": {
            "$ref": "#/definitions/RatePlanAgeCategoryModel"
          },
          "x-nullable": true
        },
        "includedServices": {
          "type": "array",
          "description": "Services that are included in the rate plan",
          "items": {
            "$ref": "#/definitions/RatePlanServiceModel"
          },
          "x-nullable": true
        },
        "companies": {
          "type": "array",
          "description": "Companies that can use this rate plan",
          "items": {
            "$ref": "#/definitions/CreateCompanyRatePlanModel"
          },
          "x-nullable": true
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.\nThis is a temporary field, avoid using it.",
          "items": {
            "$ref": "#/definitions/AccountingConfigModel"
          },
          "x-nullable": true
        },
        "marketSegmentId": {
          "type": "string",
          "description": "The id of the market segment for this rate plan",
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "NONREF",
        "propertyId": "MUC",
        "unitGroupId": "MUC-DBL",
        "cancellationPolicyId": "MUC-FLE",
        "channelCodes": [
          "Direct",
          "BookingCom",
          "Ibe"
        ],
        "promoCodes": [
          "APA55100",
          "DISCOUNT20"
        ],
        "isSubjectToCityTax": true,
        "isYieldable": true,
        "timeSliceDefinitionId": "MUC-NIGHT",
        "name": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "description": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "minGuaranteeType": "PM6Hold",
        "priceCalculationMode": "Truncate",
        "bookingPeriods": [
          {
            "from": "2026-10-26T10:02:24.1944764\u002B01:00",
            "to": "2026-11-09T10:02:24.1944764\u002B01:00"
          },
          {
            "from": "2026-11-12T10:02:24.1944764\u002B01:00",
            "to": "2027-01-01T10:02:24.1944764\u002B01:00"
          }
        ],
        "restrictions": {
          "minAdvance": {
            "hours": 12,
            "days": 180
          },
          "maxAdvance": {
            "months": 24
          }
        },
        "pricingRule": {
          "baseRatePlanId": "MUC-NONREF-SGL",
          "type": "Absolute",
          "value": 20.00
        },
        "surcharges": [
          {
            "adults": 2,
            "type": "Absolute",
            "value": 10.0
          }
        ],
        "ageCategories": [
          {
            "id": "MUC-BABY",
            "surcharges": [
              {
                "adults": 1,
                "value": 20.0
              }
            ]
          }
        ],
        "includedServices": [
          {
            "serviceId": "MUC-BRKF",
            "grossPrice": {
              "amount": 10.0,
              "currency": "EUR"
            }
          }
        ],
        "companies": [
          {
            "id": "MUC-APA",
            "corporateCode": "APA-DBL"
          }
        ],
        "accountingConfigs": [
          {
            "state": "Unknown",
            "vatType": "Normal",
            "serviceType": "FoodAndBeverages",
            "subAccountId": "ALCO",
            "validFrom": "2021-01-01"
          }
        ],
        "marketSegmentId": "MUC-CORP"
      }
    },
    "CreateScheduleModel": {
      "type": "object",
      "required": [
        "code",
        "name",
        "propertyId",
        "validFrom",
        "validTo"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the schedule, used to assemble its id",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "string",
          "description": "The name for the schedule",
          "minLength": 1
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the schedule will be created"
        },
        "validFrom": {
          "type": "string",
          "description": "The first arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "validTo": {
          "type": "string",
          "description": "The last arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "WIESN2026",
        "name": "Oktoberfest 2026",
        "propertyId": "MUC",
        "validFrom": "2026-09-20",
        "validTo": "2026-10-05"
      }
    },
    "CreateServiceModel": {
      "type": "object",
      "required": [
        "code",
        "defaultGrossPrice",
        "description",
        "name",
        "postNextDay",
        "pricingUnit",
        "propertyId"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code for the service that can be shown in reports and table views",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "object",
          "description": "The name for the service",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the service",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the item will be created"
        },
        "defaultGrossPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "pricingUnit": {
          "type": "string",
          "description": "Defines the granularity for which this item is offered and priced.",
          "enum": [
            "Room",
            "Person"
          ]
        },
        "postNextDay": {
          "type": "boolean",
          "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day."
        },
        "availability": {
          "$ref": "#/definitions/AvailabilityModel"
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the service is sold through. When no channels are defined, the service is sold only in a package",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          },
          "x-nullable": true
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.\nThis is a temporary field, avoid using it.",
          "items": {
            "$ref": "#/definitions/ServiceAccountingConfigModel"
          },
          "x-nullable": true
        },
        "ageCategoryId": {
          "type": "string",
          "description": "The id of the age category associated with this service.",
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "code": "BRK",
        "name": {
          "en": "Breakfast",
          "de": "Fr\u00FChst\u00FCck"
        },
        "description": {
          "en": "Yummy yummy breakfast",
          "de": "Leckeres Fr\u00FChst\u00FCck"
        },
        "propertyId": "MUC",
        "defaultGrossPrice": {
          "amount": 20.0,
          "currency": "EUR"
        },
        "pricingUnit": "Person",
        "postNextDay": true,
        "availability": {
          "mode": "Daily",
          "quantity": 3,
          "daysOfWeek": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
          ]
        },
        "channelCodes": [
          "Direct",
          "Ibe",
          "BookingCom",
          "ChannelManager"
        ],
        "accountingConfigs": [
          {
            "state": "Unknown",
            "revenueAllocation": [
              {
                "vatType": "Normal",
                "subAccountId": "BEV",
                "percent": 30
              },
              {
                "vatType": "Reduced",
                "subAccountId": "FOOD",
                "percent": 70
              }
            ],
            "serviceType": "FoodAndBeverages",
            "validFrom": "2021-01-01"
          }
        ],
        "ageCategoryId": "MUC-BABY"
      }
    },
    "EmbeddedCancellationPolicyModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The cancellation policy id"
        },
        "code": {
          "type": "string",
          "description": "The code for the cancellation policy that can be shown in reports and table views",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the cancellation policy",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the cancellation policy",
          "x-nullable": true
        },
        "periodPriorToArrival": {
          "$ref": "#/definitions/PeriodModel"
        }
      },
      "additionalProperties": false
    },
    "EmbeddedMarketSegmentModel": {
      "type": "object",
      "description": "The market segment identifier to help categorize your bookings for revenue management and reporting purposes.",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The market segment id"
        },
        "code": {
          "type": "string",
          "description": "The market segment code",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The market segment name",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "EmbeddedNoShowPolicyModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The no-show policy id"
        },
        "code": {
          "type": "string",
          "description": "The code for the no-show policy that can be shown in reports and table views",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the no-show policy",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the no-show policy",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "EmbeddedPropertyModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The property id"
        },
        "code": {
          "type": "string",
          "description": "The code for the property that can be shown in reports and table views",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the property",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the property",
          "readOnly": true,
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "EmbeddedRatePlanModel": {
      "type": "object",
      "required": [
        "id",
        "isSubjectToCityTax"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The rate plan id"
        },
        "code": {
          "type": "string",
          "description": "The code for the rate plan that can be shown in reports and table views",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the rate plan",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the rate plan",
          "x-nullable": true
        },
        "isSubjectToCityTax": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to city tax or not"
        }
      },
      "additionalProperties": false
    },
    "EmbeddedServiceModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The service id"
        },
        "code": {
          "type": "string",
          "description": "The code for the service",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the service",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the service",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "EmbeddedTimeSliceDefinitionModel": {
      "type": "object",
      "required": [
        "checkInTime",
        "checkOutTime",
        "id",
        "name",
        "template"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The time slice definition id"
        },
        "name": {
          "type": "string",
          "description": "The name for the time slice definition",
          "minLength": 1
        },
        "template": {
          "type": "string",
          "description": "The template used by the time slice defintion",
          "enum": [
            "DayUse",
            "OverNight"
          ]
        },
        "checkInTime": {
          "type": "string",
          "description": "The check-in time for reservations based on this rate plan\u003Cbr /\u003EA time as defined in the \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E"
        },
        "checkOutTime": {
          "type": "string",
          "description": "The check-out time for reservations based on this rate plan\u003Cbr /\u003EA time as defined in the \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E"
        }
      },
      "additionalProperties": false
    },
    "EmbeddedUnitGroupModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The unit group id"
        },
        "code": {
          "type": "string",
          "description": "The code for the unit group that can be shown in reports and table views",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name for the unit group",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "description": "The description for the unit group",
          "x-nullable": true
        },
        "type": {
          "type": "string",
          "description": "The unit group type",
          "enum": [
            "BedRoom",
            "MeetingRoom",
            "EventSpace",
            "ParkingLot",
            "Other"
          ],
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "FeeDetailsModel": {
      "type": "object",
      "required": [
        "vatType"
      ],
      "properties": {
        "vatType": {
          "type": "string",
          "description": "VAT that applies for the fee",
          "enum": [
            "Null",
            "VeryReduced",
            "Reduced",
            "Normal",
            "Without",
            "Special",
            "Special1",
            "Special2",
            "ReducedCovid19",
            "NormalCovid19",
            "Mixed"
          ]
        },
        "fixedValue": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "percentValue": {
          "$ref": "#/definitions/PercentValueModel"
        }
      },
      "additionalProperties": false
    },
    "HurdleRateItemModel": {
      "type": "object",
      "required": [
        "amount",
        "ceiling",
        "created",
        "date",
        "delta",
        "effectiveAmount",
        "maxSolds",
        "propertyId",
        "unitGroupId",
        "updated",
        "upSolds"
      ],
      "properties": {
        "propertyId": {
          "type": "string",
          "description": "The property id"
        },
        "unitGroupId": {
          "type": "string",
          "description": "The unit group id"
        },
        "date": {
          "type": "string",
          "description": "Hurdle rate date",
          "format": "date",
          "example": "2020-10-10"
        },
        "amount": {
          "type": "number",
          "description": "Monetary amount in currency units",
          "format": "double"
        },
        "delta": {
          "type": "number",
          "description": "Increment added to hurdle per UpSold, capped by Ceiling",
          "format": "double"
        },
        "ceiling": {
          "type": "integer",
          "description": "Reservations count after which Delta stops increasing",
          "format": "int32"
        },
        "maxSolds": {
          "type": "integer",
          "description": "Maximum reservations allowed",
          "format": "int32"
        },
        "upSolds": {
          "type": "integer",
          "description": "Reservations counter",
          "format": "int32"
        },
        "effectiveAmount": {
          "type": "number",
          "description": "Effective amount calculated as Amount \u002B Delta * UpSolds, capped by Ceiling",
          "format": "double"
        },
        "created": {
          "type": "string",
          "description": "The date when the resurce was created.\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "updated": {
          "type": "string",
          "description": "The date when the resurce was last time updated.\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        }
      },
      "additionalProperties": false
    },
    "HurdleRateModel": {
      "type": "object",
      "required": [
        "amount",
        "ceiling",
        "date",
        "delta",
        "maxSolds"
      ],
      "properties": {
        "date": {
          "type": "string",
          "format": "date",
          "example": "2020-10-10"
        },
        "amount": {
          "type": "number",
          "format": "double",
          "minimum": 0
        },
        "delta": {
          "type": "number",
          "format": "double",
          "minimum": 0
        },
        "ceiling": {
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 0
        },
        "maxSolds": {
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        }
      },
      "additionalProperties": false
    },
    "HurdleRatesListModel": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "hurdleRates": {
          "type": "array",
          "description": "List of rates",
          "items": {
            "$ref": "#/definitions/HurdleRateItemModel"
          },
          "x-nullable": true
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "hurdleRates": [
          {
            "propertyId": "P123",
            "unitGroupId": "UG1",
            "date": "2023-10-01",
            "amount": 100.0,
            "delta": 10.0,
            "ceiling": 5,
            "maxSolds": 20,
            "upSolds": 2,
            "effectiveAmount": 0.0,
            "created": "2026-11-02T10:02:24.1944764\u002B01:00",
            "updated": "2026-11-02T10:02:24.1944764\u002B01:00"
          },
          {
            "propertyId": "P123",
            "unitGroupId": "UG1",
            "date": "2023-10-02",
            "amount": 200.0,
            "delta": 20.0,
            "ceiling": 6,
            "maxSolds": 21,
            "upSolds": 3,
            "effectiveAmount": 0.0,
            "created": "2026-11-02T10:02:24.1944764\u002B01:00",
            "updated": "2026-11-02T10:02:24.1944764\u002B01:00"
          }
        ],
        "count": 2
      }
    },
    "InvoiceNetworkIdentityModel": {
      "type": "object",
      "required": [
        "id",
        "network"
      ],
      "properties": {
        "network": {
          "type": "string",
          "description": "The Network through which to send the Invoice\ne. g. Peppol",
          "enum": [
            "Peppol"
          ]
        },
        "id": {
          "type": "string",
          "description": "The Id of the company at the network.\ne.g. \u00220208:123456789\u0022",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "MessageItemCollection": {
      "type": "object",
      "properties": {
        "messages": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "readOnly": true,
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "MonetaryValueModel": {
      "type": "object",
      "required": [
        "amount",
        "currency"
      ],
      "properties": {
        "amount": {
          "type": "number",
          "format": "double"
        },
        "currency": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "NoShowPolicyCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The no-show policy ID"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-NONREF"
      }
    },
    "NoShowPolicyItemModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "id",
        "name",
        "propertyId"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The no-show policy id"
        },
        "code": {
          "type": "string",
          "description": "The code for the policy"
        },
        "name": {
          "type": "string",
          "description": "The name for the no-show policy",
          "minLength": 1
        },
        "description": {
          "type": "string",
          "description": "The description for the no-show policy",
          "minLength": 1
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the no-show policy was created"
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false
    },
    "NoShowPolicyListModel": {
      "type": "object",
      "required": [
        "count",
        "noShowPolicies"
      ],
      "properties": {
        "noShowPolicies": {
          "type": "array",
          "description": "List of no-show policies",
          "items": {
            "$ref": "#/definitions/NoShowPolicyItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "noShowPolicies": [
          {
            "id": "MUC-FLEX",
            "code": "FLEX",
            "name": "No-Show Fee",
            "description": "100 Euro of the accommodation fees, for the complete stay. Reduced VAT applies.",
            "propertyId": "MUC",
            "fee": {
              "vatType": "Reduced",
              "fixedValue": {
                "amount": 100.0,
                "currency": "EUR"
              }
            }
          },
          {
            "id": "BER-NONREF",
            "code": "NONREF",
            "name": "No-Show Fee",
            "description": "100% of the accommodation fees, for the complete stay. Reduced VAT applies.",
            "propertyId": "BER",
            "fee": {
              "vatType": "Reduced",
              "percentValue": {
                "percent": 100,
                "limit": 1,
                "includeServiceIds": [
                  "MUC-BRK"
                ]
              }
            }
          }
        ],
        "count": 2
      }
    },
    "NoShowPolicyModel": {
      "type": "object",
      "required": [
        "code",
        "description",
        "fee",
        "id",
        "name",
        "propertyId"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The no-show policy id"
        },
        "code": {
          "type": "string",
          "description": "The code for the policy",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "object",
          "description": "The name for the no-show policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the no-show policy",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the no-show policy was created"
        },
        "fee": {
          "$ref": "#/definitions/FeeDetailsModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-NOSHOW",
        "code": "NOSHOW",
        "name": {
          "en": "No-Show Fee",
          "de": "No-Show Fee"
        },
        "description": {
          "en": "100% of the accommodation fees, for the complete stay. Reduced VAT applies.",
          "de": "100% of the accommodation fees, for the complete stay. Reduced VAT applies."
        },
        "propertyId": "MUC",
        "fee": {
          "vatType": "Reduced",
          "percentValue": {
            "percent": 100,
            "limit": 1,
            "includeServiceIds": [
              "MUC-BRK"
            ]
          }
        }
      }
    },
    "Operation": {
      "type": "object",
      "properties": {
        "value": {
          "x-nullable": true
        },
        "path": {
          "type": "string",
          "x-nullable": true
        },
        "op": {
          "type": "string",
          "x-nullable": true
        },
        "from": {
          "type": "string",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "PercentValueModel": {
      "type": "object",
      "required": [
        "percent"
      ],
      "properties": {
        "percent": {
          "type": "integer",
          "description": "Percent to take from the base. Must be between 0 and 100.",
          "format": "int32",
          "maximum": 100,
          "minimum": 0
        },
        "limit": {
          "type": "integer",
          "description": "If set, limits the calculation base to the specified number of time slices, starting from the beginning.\n\nIf not set, the entire stay will be used as a base.",
          "format": "int32",
          "x-nullable": true
        },
        "includeServiceIds": {
          "type": "array",
          "description": "Services included in the calculation base. If none are set, only charges for the unit will be used.\n\nThe services are only included, if they are part of the rate plan. Extra services are ignored.",
          "items": {
            "type": "string"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "PeriodModel": {
      "type": "object",
      "properties": {
        "hours": {
          "type": "integer",
          "description": "The number of hours within the period",
          "format": "int64",
          "x-nullable": true
        },
        "days": {
          "type": "integer",
          "description": "The number of days within the period",
          "format": "int32",
          "x-nullable": true
        },
        "months": {
          "type": "integer",
          "description": "The number of months within the period",
          "format": "int32",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "PricingRuleModel": {
      "type": "object",
      "required": [
        "baseRatePlan",
        "type",
        "value"
      ],
      "properties": {
        "baseRatePlan": {
          "$ref": "#/definitions/EmbeddedRatePlanModel"
        },
        "type": {
          "type": "string",
          "description": "The type used to control the calculation of the difference to the rates of the defined base\nrate plan",
          "enum": [
            "Absolute",
            "Percent"
          ]
        },
        "value": {
          "type": "number",
          "description": "The value used to control the calculation of the difference to the rates of the defined base\nrate plan. It can be a positive and a negative value",
          "format": "double"
        }
      },
      "additionalProperties": false
    },
    "PromoCodeListModel": {
      "type": "object",
      "required": [
        "count",
        "promoCodes"
      ],
      "properties": {
        "promoCodes": {
          "type": "array",
          "description": "List of existing promo codes",
          "items": {
            "$ref": "#/definitions/PromoCodeModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "promoCodes": [
          {
            "code": "APALEO",
            "relatedRateplanIds": [
              "BER-APALEO_FREE-SGL",
              "BER-APALEO_FREE-DBL",
              "MUC-APALEO_KING-SUITE"
            ]
          }
        ],
        "count": 5
      }
    },
    "PromoCodeModel": {
      "type": "object",
      "required": [
        "code",
        "relatedRateplanIds"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "The code of special rate or discount\nor agreement between the hotel and an organization"
        },
        "relatedRateplanIds": {
          "type": "array",
          "description": "All rate plan IDs having this code",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "RateItemModel": {
      "type": "object",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "Date and time the rate begins\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "to": {
          "type": "string",
          "description": "Date and time the rate ends\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "price": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "includedServicesPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "calculatedPrices": {
          "type": "array",
          "description": "A list of prices for occupancies 2 or higher. Only set, if the rate plan defines surcharges for different occupancies",
          "items": {
            "$ref": "#/definitions/CalculatedRateModel"
          },
          "x-nullable": true
        },
        "restrictions": {
          "$ref": "#/definitions/RateRestrictionsModel"
        }
      },
      "additionalProperties": false
    },
    "RateListModel": {
      "type": "object",
      "required": [
        "count",
        "rates"
      ],
      "properties": {
        "rates": {
          "type": "array",
          "description": "List of rates",
          "items": {
            "$ref": "#/definitions/RateItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "rates": [
          {
            "from": "2026-11-02T17:00:00\u002B01:00",
            "to": "2026-11-03T11:00:00\u002B01:00",
            "price": {
              "amount": 123.0,
              "currency": "EUR"
            },
            "calculatedPrices": [
              {
                "adults": 2,
                "price": {
                  "amount": 133.0,
                  "currency": "EUR"
                }
              }
            ],
            "restrictions": {
              "minLengthOfStay": 2,
              "maxLengthOfStay": 30,
              "closed": false,
              "closedOnArrival": true,
              "closedOnDeparture": true
            }
          }
        ],
        "count": 0
      }
    },
    "RatePatchModel": {
      "type": "object",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "The start of the time range to filter the rates by. All rates where the from date and time is equal or later than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E"
        },
        "to": {
          "type": "string",
          "description": "The end of the time range to filter the rates by. All rates where the from date and time is earlier than\nthe specified date and optional time will be affected\u003Cbr /\u003ESpecify either a pure date or a date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E"
        },
        "weekDays": {
          "type": "array",
          "description": "The weekdays that will be patched. If not specified, all weekdays will be patched.",
          "items": {
            "type": "string",
            "enum": [
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday",
              "Sunday"
            ]
          },
          "x-nullable": true
        },
        "operations": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Operation"
          }
        }
      },
      "additionalProperties": false
    },
    "RatePlanAgeCategoryModel": {
      "type": "object",
      "required": [
        "id",
        "surcharges"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The id of the age category"
        },
        "surcharges": {
          "type": "array",
          "description": "Additional charges for the current age category. The absolute value will be added to the manually defined or calculated derived rates.\nThe values for \u0027adults\u0027 must be unique within the list, and starting from 1. Values equal or higher than\nthe maximum unit group occupancy will be silently ignored.",
          "items": {
            "$ref": "#/definitions/AgeCategorySurchargeModel"
          }
        }
      },
      "additionalProperties": false
    },
    "RatePlanAttachedScheduleModel": {
      "type": "object",
      "required": [
        "cancellationPolicy",
        "code",
        "id",
        "name",
        "validFrom",
        "validTo"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The schedule id"
        },
        "code": {
          "type": "string",
          "description": "The code for the schedule"
        },
        "name": {
          "type": "string",
          "description": "The name for the schedule",
          "minLength": 1
        },
        "validFrom": {
          "type": "string",
          "description": "The first arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "validTo": {
          "type": "string",
          "description": "The last arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/CancellationPolicyModel"
        }
      },
      "additionalProperties": false
    },
    "RatePlanAttachedSchedulesModel": {
      "type": "object",
      "required": [
        "default",
        "ratePlanId"
      ],
      "properties": {
        "ratePlanId": {
          "type": "string",
          "description": "The rate plan id"
        },
        "default": {
          "$ref": "#/definitions/RatePlanDefaultCancellationPolicyModel"
        },
        "schedules": {
          "type": "array",
          "description": "Schedules attached to the rate plan. Omitted when none are attached.",
          "items": {
            "$ref": "#/definitions/RatePlanAttachedScheduleModel"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "ratePlanId": "MUC-BAR",
        "default": {
          "cancellationPolicyId": "MUC-FLE",
          "cancellationPolicy": {
            "id": "MUC-FLE",
            "code": "FLE",
            "name": {
              "en": "Flexible",
              "de": "Flexibel"
            },
            "description": {
              "en": "Free cancellation until 36 hours before arrival.",
              "de": "Kostenfreies Storno bis 36 Stunden vor Ankunft."
            },
            "propertyId": "MUC",
            "periodFromReference": {
              "hours": 12,
              "days": 1
            },
            "reference": "PriorToArrival",
            "fee": {
              "vatType": "Reduced",
              "percentValue": {
                "percent": 100,
                "limit": 1,
                "includeServiceIds": [
                  "MUC-BRK"
                ]
              }
            }
          }
        },
        "schedules": [
          {
            "id": "MUC-WIESN2026",
            "code": "WIESN2026",
            "name": "Oktoberfest 2026",
            "validFrom": "2026-09-20",
            "validTo": "2026-10-05",
            "cancellationPolicy": {
              "id": "MUC-STR",
              "code": "STR",
              "name": {
                "en": "Flexible",
                "de": "Flexibel"
              },
              "description": {
                "en": "Free cancellation until 36 hours before arrival.",
                "de": "Kostenfreies Storno bis 36 Stunden vor Ankunft."
              },
              "propertyId": "MUC",
              "periodFromReference": {
                "hours": 12,
                "days": 1
              },
              "reference": "PriorToArrival",
              "fee": {
                "vatType": "Reduced",
                "percentValue": {
                  "percent": 100,
                  "limit": 1,
                  "includeServiceIds": [
                    "MUC-BRK"
                  ]
                }
              }
            }
          }
        ]
      }
    },
    "RatePlanCompanyModel": {
      "type": "object",
      "required": [
        "code",
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Rate plan ID that is used by this company"
        },
        "code": {
          "type": "string",
          "description": "Rate plan code that is used by this company"
        },
        "corporateCode": {
          "type": "string",
          "description": "Company rate plan code, identifying the company \u002B rate plan pair. Is used is offers.",
          "x-nullable": true
        },
        "name": {
          "type": "string",
          "description": "The name of the rate plan",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "RatePlanCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The rate plan id"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-NONREF-DBL"
      }
    },
    "RatePlanDefaultCancellationPolicyModel": {
      "type": "object",
      "required": [
        "cancellationPolicy",
        "cancellationPolicyId"
      ],
      "properties": {
        "cancellationPolicyId": {
          "type": "string",
          "description": "The id of the rate plan\u0027s default cancellation policy"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/CancellationPolicyModel"
        }
      },
      "additionalProperties": false
    },
    "RatePlanItemModel": {
      "type": "object",
      "required": [
        "accountingConfigs",
        "cancellationPolicy",
        "channelCodes",
        "code",
        "derivationLevel",
        "description",
        "id",
        "isBookable",
        "isDerived",
        "isSubjectToCityTax",
        "isYieldable",
        "minGuaranteeType",
        "name",
        "noShowPolicy",
        "property",
        "timeSliceDefinition",
        "unitGroup"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The rate plan id"
        },
        "code": {
          "type": "string",
          "description": "The code for the rate plan that can be shown in reports and table views"
        },
        "name": {
          "type": "string",
          "description": "The name for the rate plan",
          "minLength": 1
        },
        "description": {
          "type": "string",
          "description": "The description for the rate plan",
          "minLength": 1
        },
        "minGuaranteeType": {
          "type": "string",
          "description": "The minimum guarantee to be provided when this rate plan is booked so\nthe reservation will be guaranteed to the guest",
          "enum": [
            "PM6Hold",
            "CreditCard",
            "Prepayment",
            "Company"
          ]
        },
        "priceCalculationMode": {
          "type": "string",
          "description": "The calculation mode is used when calculating the adults\u0027 surcharges and derived rates.\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of \u002B10%,\nwhen Truncate is selected, the result would be 125.99 \u002B 12 = 137.99\nWhen Round is selected, the result would be 125.99 \u002B 12.60 = 138.59",
          "enum": [
            "Truncate",
            "Round"
          ]
        },
        "property": {
          "$ref": "#/definitions/EmbeddedPropertyModel"
        },
        "unitGroup": {
          "$ref": "#/definitions/EmbeddedUnitGroupModel"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/EmbeddedCancellationPolicyModel"
        },
        "noShowPolicy": {
          "$ref": "#/definitions/EmbeddedNoShowPolicyModel"
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the rate plan is sold through",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          }
        },
        "promoCodes": {
          "type": "array",
          "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\nanymore and only be offered when one of the promo codes is given in the offer request.\nFor backward compatibility it is still not possible to set multiple promo codes.",
          "items": {
            "type": "string"
          },
          "x-nullable": true
        },
        "timeSliceDefinition": {
          "$ref": "#/definitions/EmbeddedTimeSliceDefinitionModel"
        },
        "restrictions": {
          "$ref": "#/definitions/BookingRestrictionsModel"
        },
        "bookingPeriods": {
          "type": "array",
          "description": "Time periods when the rate plan is bookable",
          "items": {
            "$ref": "#/definitions/BookingPeriodModel"
          },
          "x-nullable": true
        },
        "isBookable": {
          "type": "boolean",
          "description": "Indicates whether the rate plan has an active booking period"
        },
        "isSubjectToCityTax": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to city tax or not"
        },
        "pricingRule": {
          "$ref": "#/definitions/PricingRuleModel"
        },
        "isDerived": {
          "type": "boolean",
          "description": "Indicates whether the rates for this rate plan are derived from another rate plan"
        },
        "derivationLevel": {
          "type": "integer",
          "description": "Indicates the derivation level of the rate plan. When zero, it is a rate plan with manually managed prices.",
          "format": "int32"
        },
        "surcharges": {
          "type": "array",
          "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.",
          "items": {
            "$ref": "#/definitions/SurchargeModel"
          },
          "x-nullable": true
        },
        "ageCategories": {
          "type": "array",
          "description": "Additional charges per age category.",
          "items": {
            "$ref": "#/definitions/RatePlanAgeCategoryModel"
          },
          "x-nullable": true
        },
        "includedServices": {
          "type": "array",
          "description": "Services that are included in the rate plan",
          "items": {
            "$ref": "#/definitions/RatePlanServiceItemModel"
          },
          "x-nullable": true
        },
        "companies": {
          "type": "array",
          "description": "Companies that can use this rate plan",
          "items": {
            "$ref": "#/definitions/CompanyRatePlanModel"
          },
          "x-nullable": true
        },
        "ratesRange": {
          "$ref": "#/definitions/RatesRangeModel"
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.",
          "items": {
            "$ref": "#/definitions/AccountingConfigModel"
          }
        },
        "marketSegment": {
          "$ref": "#/definitions/EmbeddedMarketSegmentModel"
        },
        "isYieldable": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to evaluation against hurdle rates when deciding on rate availability."
        },
        "isArchived": {
          "type": "boolean",
          "description": "Whether the rate plan is archived or not.",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "RatePlanListModel": {
      "type": "object",
      "required": [
        "count",
        "ratePlans"
      ],
      "properties": {
        "ratePlans": {
          "type": "array",
          "description": "List of rate plans",
          "items": {
            "$ref": "#/definitions/RatePlanItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "ratePlans": [
          {
            "id": "MUC-NONREF-DBL",
            "code": "NONREF",
            "name": "Non Refundable",
            "description": "Non Refundable",
            "minGuaranteeType": "PM6Hold",
            "priceCalculationMode": "Truncate",
            "property": {
              "id": "MUC",
              "code": "MUC",
              "name": "Demo Hotel Munich",
              "description": "This is the demo hotel Munich"
            },
            "unitGroup": {
              "id": "MUC-DBL",
              "code": "DBL",
              "name": "Double",
              "description": "Double",
              "type": "BedRoom"
            },
            "cancellationPolicy": {
              "id": "MUC-FLE",
              "code": "FLE",
              "name": "Flexible",
              "description": "Free cancellation until 36 hours before arrival."
            },
            "noShowPolicy": {
              "id": "MUC-NONREF",
              "code": "NONREF",
              "name": "Non Refundable",
              "description": "Non Refundable"
            },
            "channelCodes": [
              "Direct",
              "BookingCom",
              "Ibe"
            ],
            "promoCodes": [
              "APA55100"
            ],
            "timeSliceDefinition": {
              "id": "MUC-NIGHT",
              "name": "Over Night",
              "template": "OverNight",
              "checkInTime": "17:00:00",
              "checkOutTime": "10:00:00"
            },
            "isBookable": false,
            "isSubjectToCityTax": false,
            "isDerived": false,
            "derivationLevel": 0,
            "ratesRange": {
              "from": "2026-11-12",
              "to": "2026-11-22"
            },
            "accountingConfigs": [
              {
                "state": "Unknown",
                "vatType": "ReducedCovid19",
                "serviceType": "FoodAndBeverages",
                "validFrom": "2026-11-02"
              }
            ],
            "isYieldable": false
          },
          {
            "id": "MUC-FLEX-DBL",
            "code": "FLEX",
            "name": "Flexible",
            "description": "Flexible",
            "minGuaranteeType": "PM6Hold",
            "priceCalculationMode": "Round",
            "property": {
              "id": "MUC",
              "code": "MUC",
              "name": "Demo Hotel Munich",
              "description": "This is the demo hotel Munich"
            },
            "unitGroup": {
              "id": "MUC-DBL",
              "code": "DBL",
              "name": "Double",
              "description": "Double",
              "type": "BedRoom"
            },
            "cancellationPolicy": {
              "id": "MUC-FLE",
              "code": "FLE",
              "name": "Flexible",
              "description": "Free cancellation until 36 hours before arrival."
            },
            "noShowPolicy": {
              "id": "MUC-NONREF",
              "code": "NONREF",
              "name": "Non Refundable",
              "description": "Non Refundable"
            },
            "channelCodes": [
              "Direct",
              "BookingCom",
              "Ibe"
            ],
            "timeSliceDefinition": {
              "id": "MUC-NIGHT",
              "name": "Over Night",
              "template": "OverNight",
              "checkInTime": "17:00:00",
              "checkOutTime": "10:00:00"
            },
            "isBookable": false,
            "isSubjectToCityTax": false,
            "isDerived": false,
            "derivationLevel": 0,
            "accountingConfigs": [
              {
                "state": "Unknown",
                "vatType": "ReducedCovid19",
                "serviceType": "FoodAndBeverages",
                "validFrom": "2026-11-02"
              }
            ],
            "marketSegment": {
              "id": "CORP",
              "code": "CORP",
              "name": "Corporate Groups"
            },
            "isYieldable": false,
            "isArchived": true
          }
        ],
        "count": 0
      }
    },
    "RatePlanModel": {
      "type": "object",
      "required": [
        "accountingConfigs",
        "cancellationPolicy",
        "channelCodes",
        "code",
        "derivationLevel",
        "description",
        "id",
        "isBookable",
        "isDerived",
        "isSubjectToCityTax",
        "minGuaranteeType",
        "name",
        "noShowPolicy",
        "property",
        "timeSliceDefinition",
        "unitGroup"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The rate plan  id"
        },
        "code": {
          "type": "string",
          "description": "The code for the rate plan that can be shown in reports and table views"
        },
        "name": {
          "type": "object",
          "description": "The name for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "minGuaranteeType": {
          "type": "string",
          "description": "The minimum guarantee to be provided when this rate plan is booked so\nthe reservation will be guaranteed to the guest",
          "enum": [
            "PM6Hold",
            "CreditCard",
            "Prepayment",
            "Company"
          ]
        },
        "priceCalculationMode": {
          "type": "string",
          "description": "The calculation mode is used when calculating the adults\u0027 surcharges and derived rates.\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of \u002B10%,\nwhen Truncate is selected, the result would be 125.99 \u002B 12 = 137.99\nWhen Round is selected, the result would be 125.99 \u002B 12.60 = 138.59",
          "enum": [
            "Truncate",
            "Round"
          ]
        },
        "property": {
          "$ref": "#/definitions/EmbeddedPropertyModel"
        },
        "unitGroup": {
          "$ref": "#/definitions/EmbeddedUnitGroupModel"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/EmbeddedCancellationPolicyModel"
        },
        "noShowPolicy": {
          "$ref": "#/definitions/EmbeddedNoShowPolicyModel"
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the rate plan is sold through",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          }
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.",
          "items": {
            "$ref": "#/definitions/AccountingConfigModel"
          }
        },
        "promoCodes": {
          "type": "array",
          "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\nanymore and only be offered when one of the promo codes is given in the offer request.\nFor backward compatibility it is still not possible to set multiple promo codes.",
          "items": {
            "type": "string"
          },
          "x-nullable": true
        },
        "timeSliceDefinition": {
          "$ref": "#/definitions/EmbeddedTimeSliceDefinitionModel"
        },
        "restrictions": {
          "$ref": "#/definitions/BookingRestrictionsModel"
        },
        "bookingPeriods": {
          "type": "array",
          "description": "Time periods when the rate plan is bookable",
          "items": {
            "$ref": "#/definitions/BookingPeriodModel"
          },
          "x-nullable": true
        },
        "isBookable": {
          "type": "boolean",
          "description": "Indicates whether the rate plan has an active booking period"
        },
        "isSubjectToCityTax": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to city tax or not.\nDefault value is \u0060true\u0060"
        },
        "pricingRule": {
          "$ref": "#/definitions/PricingRuleModel"
        },
        "isDerived": {
          "type": "boolean",
          "description": "Indicates whether the rates for this rate plan are derived from another rate plan"
        },
        "derivationLevel": {
          "type": "integer",
          "description": "Indicates the derivation level of the rate plan. When zero, it is a rate plan with manually managed prices.",
          "format": "int32"
        },
        "surcharges": {
          "type": "array",
          "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.",
          "items": {
            "$ref": "#/definitions/SurchargeModel"
          },
          "x-nullable": true
        },
        "ageCategories": {
          "type": "array",
          "description": "Additional charges per age category.",
          "items": {
            "$ref": "#/definitions/RatePlanAgeCategoryModel"
          },
          "x-nullable": true
        },
        "includedServices": {
          "type": "array",
          "description": "Services that are included in the rate plan",
          "items": {
            "$ref": "#/definitions/RatePlanServiceModel"
          },
          "x-nullable": true
        },
        "companies": {
          "type": "array",
          "description": "Companies that can use this rate plan",
          "items": {
            "$ref": "#/definitions/CompanyRatePlanModel"
          },
          "x-nullable": true
        },
        "ratesRange": {
          "$ref": "#/definitions/RatesRangeModel"
        },
        "marketSegment": {
          "$ref": "#/definitions/EmbeddedMarketSegmentModel"
        },
        "isYieldable": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to evaluation against hurdle rates when deciding on rate availability."
        },
        "isArchived": {
          "type": "boolean",
          "description": "Whether the rate plan is archived or not",
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-NONREF-DBL",
        "code": "NONREF",
        "name": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "description": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "minGuaranteeType": "PM6Hold",
        "priceCalculationMode": "Truncate",
        "property": {
          "id": "MUC",
          "code": "MUC",
          "name": "Demo Hotel Munich",
          "description": "This is the demo hotel Munich"
        },
        "unitGroup": {
          "id": "MUC-DBL",
          "code": "DBL",
          "name": "Double",
          "description": "Double",
          "type": "BedRoom"
        },
        "cancellationPolicy": {
          "id": "MUC-FLE",
          "code": "FLE",
          "name": "Flexible",
          "description": "Free cancellation until 36 hours before arrival."
        },
        "noShowPolicy": {
          "id": "MUC-NONREF",
          "code": "NONREF",
          "name": "Non Refundable",
          "description": "Non Refundable"
        },
        "channelCodes": [
          "Direct",
          "BookingCom",
          "Ibe"
        ],
        "accountingConfigs": [
          {
            "state": "Unknown",
            "vatType": "Normal",
            "serviceType": "FoodAndBeverages",
            "subAccountId": "ALCO",
            "validFrom": "2021-01-01"
          }
        ],
        "promoCodes": [
          "APA55100",
          "DISCOUNT20"
        ],
        "timeSliceDefinition": {
          "id": "MUC-NIGHT",
          "name": "Over Night",
          "template": "OverNight",
          "checkInTime": "17:00:00",
          "checkOutTime": "10:00:00"
        },
        "restrictions": {
          "minAdvance": {
            "hours": 12,
            "days": 180
          },
          "maxAdvance": {
            "months": 24
          }
        },
        "bookingPeriods": [
          {
            "from": "2026-10-26T10:02:24.1944764\u002B01:00",
            "to": "2026-11-09T10:02:24.1944764\u002B01:00"
          },
          {
            "from": "2026-11-12T10:02:24.1944764\u002B01:00",
            "to": "2027-01-01T10:02:24.1944764\u002B01:00"
          }
        ],
        "isBookable": false,
        "isSubjectToCityTax": false,
        "pricingRule": {
          "baseRatePlan": {
            "id": "MUC-NONREF_SGL",
            "code": "NONREF",
            "name": "Non Refundable",
            "description": "Non Refundable",
            "isSubjectToCityTax": false
          },
          "type": "Absolute",
          "value": 20.00
        },
        "isDerived": true,
        "derivationLevel": 1,
        "surcharges": [
          {
            "adults": 2,
            "type": "Absolute",
            "value": 10.0
          }
        ],
        "ageCategories": [
          {
            "id": "MUC-BABY",
            "surcharges": [
              {
                "adults": 1,
                "value": 20.0
              },
              {
                "adults": 2,
                "value": 15.5
              }
            ]
          }
        ],
        "includedServices": [
          {
            "serviceId": "MUC-WLAN",
            "grossPrice": {
              "amount": 5.0,
              "currency": "EUR"
            }
          }
        ],
        "companies": [
          {
            "id": "MUC-APA",
            "code": "APA",
            "corporateCode": "APA-DBL",
            "name": "apaleo"
          }
        ],
        "ratesRange": {
          "from": "2026-11-22",
          "to": "2026-12-12"
        },
        "marketSegment": {
          "id": "CORP",
          "code": "CORP",
          "name": "Corporate Groups"
        },
        "isYieldable": false,
        "isArchived": true
      }
    },
    "RatePlanScheduleModel": {
      "type": "object",
      "required": [
        "cancellationPolicy",
        "ratePlanId",
        "scheduleId"
      ],
      "properties": {
        "ratePlanId": {
          "type": "string",
          "description": "The rate plan id"
        },
        "scheduleId": {
          "type": "string",
          "description": "The schedule id"
        },
        "cancellationPolicy": {
          "$ref": "#/definitions/EmbeddedCancellationPolicyModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "ratePlanId": "MUC-FLEX",
        "scheduleId": "MUC-WIESN2026",
        "cancellationPolicy": {
          "id": "MUC-STRICT"
        }
      }
    },
    "RatePlanServiceItemModel": {
      "type": "object",
      "required": [
        "grossPrice",
        "pricingMode",
        "service"
      ],
      "properties": {
        "service": {
          "$ref": "#/definitions/EmbeddedServiceModel"
        },
        "grossPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "pricingMode": {
          "type": "string",
          "description": "Whether the service price is included in or added to the base rate. The property defaults to \u0060Included\u0060.",
          "enum": [
            "Included",
            "Additional"
          ]
        }
      },
      "additionalProperties": false
    },
    "RatePlanServiceModel": {
      "type": "object",
      "required": [
        "grossPrice",
        "serviceId"
      ],
      "properties": {
        "serviceId": {
          "type": "string",
          "description": "Service id to be included in the rate plan"
        },
        "grossPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "pricingMode": {
          "type": "string",
          "description": "Whether the service price is included in or added to the base rate. The property defaults to \u0060Included\u0060.",
          "enum": [
            "Included",
            "Additional"
          ],
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "RateRestrictionsModel": {
      "type": "object",
      "required": [
        "closed",
        "closedOnArrival",
        "closedOnDeparture"
      ],
      "properties": {
        "minLengthOfStay": {
          "type": "integer",
          "description": "The minimum length of stay in order to book the rate. If at least this number\nof time slices are covered by the stay duration the rate will be offered.",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1,
          "x-nullable": true
        },
        "maxLengthOfStay": {
          "type": "integer",
          "description": "The maximum length of stay in order to book the rate. If not more than this number\nof time slices are covered by the stay duration the rate will be offered.",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1,
          "x-nullable": true
        },
        "closed": {
          "type": "boolean",
          "description": "Whether the rate can be booked for a stay-through reservation"
        },
        "closedOnArrival": {
          "type": "boolean",
          "description": "Whether the rate can be booked on the reservation\u0027s arrival date"
        },
        "closedOnDeparture": {
          "type": "boolean",
          "description": "Whether the rate can be booked on the reservation\u0027s departure date"
        }
      },
      "additionalProperties": false
    },
    "RatesPatchRequestModel": {
      "type": "object",
      "properties": {
        "rates": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RatePatchModel"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "rates": [
          {
            "from": "2026-11-02",
            "to": "2026-11-03",
            "weekDays": [
              "Monday",
              "Wednesday"
            ],
            "operations": [
              {
                "value": {
                  "amount": 25.0,
                  "currency": "EUR"
                },
                "path": "/price",
                "op": "replace"
              },
              {
                "value": true,
                "path": "restrictions/closedOnArrival",
                "op": "replace"
              }
            ]
          }
        ]
      }
    },
    "RatesRangeModel": {
      "type": "object",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "The first date when the rate plan has rates set",
          "format": "date",
          "example": "2020-10-10"
        },
        "to": {
          "type": "string",
          "description": "The last date when the rate plan has rates set",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false
    },
    "ReplaceCompanyRatePlanModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Company ID that can use this rate plan"
        },
        "corporateCode": {
          "type": "string",
          "description": "Optional rate plan code that is used by the company. Default is companyCode-ratePlanCode.\nSame code can be specified for several rate plans in one company.\nNo two companies can have a rate plan with the same code.",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "ReplaceRateListModel": {
      "type": "object",
      "required": [
        "rates"
      ],
      "properties": {
        "rates": {
          "type": "array",
          "description": "List of rates",
          "items": {
            "$ref": "#/definitions/ReplaceRateModel"
          }
        }
      },
      "additionalProperties": false,
      "example": {
        "rates": [
          {
            "from": "2026-11-02T17:00:00\u002B01:00",
            "to": "2026-11-03T11:00:00\u002B01:00",
            "price": {
              "amount": 123.50,
              "currency": "EUR"
            },
            "restrictions": {
              "minLengthOfStay": 1,
              "maxLengthOfStay": 30,
              "closed": false,
              "closedOnArrival": true,
              "closedOnDeparture": true
            }
          }
        ]
      }
    },
    "ReplaceRateModel": {
      "type": "object",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "Date and time the rate begins\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "to": {
          "type": "string",
          "description": "Date and time the rate ends\u003Cbr /\u003EA date and time in UTC or with UTC offset as defined in \u003Ca href=\u0022https://en.wikipedia.org/wiki/ISO_8601\u0022\u003EISO8601:2004\u003C/a\u003E",
          "format": "date-time"
        },
        "price": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "restrictions": {
          "$ref": "#/definitions/RateRestrictionsModel"
        }
      },
      "additionalProperties": false,
      "example": {
        "from": "2026-11-02T17:00:00\u002B01:00",
        "to": "2026-11-03T11:00:00\u002B01:00",
        "price": {
          "amount": 123.50,
          "currency": "EUR"
        },
        "restrictions": {
          "minLengthOfStay": 1,
          "maxLengthOfStay": 30,
          "closed": false,
          "closedOnArrival": true,
          "closedOnDeparture": true
        }
      }
    },
    "ReplaceRatePlanModel": {
      "type": "object",
      "required": [
        "cancellationPolicyId",
        "channelCodes",
        "description",
        "minGuaranteeType",
        "name"
      ],
      "properties": {
        "name": {
          "type": "object",
          "description": "The name for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the rate plan",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "minGuaranteeType": {
          "type": "string",
          "description": "The minimum guarantee to be provided when this rate plan is booked so\nthe reservation will be guaranteed to the guest",
          "enum": [
            "PM6Hold",
            "CreditCard",
            "Prepayment",
            "Company"
          ]
        },
        "priceCalculationMode": {
          "type": "string",
          "description": "The calculation mode is used when calculating the adults\u0027 surcharges and derived rates.\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of \u002B10%,\nwhen Truncate is selected, the result would be 125.99 \u002B 12 = 137.99\nWhen Round is selected, the result would be 125.99 \u002B 12.60 = 138.59",
          "enum": [
            "Truncate",
            "Round"
          ],
          "x-nullable": true
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the rate plan is sold through",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          }
        },
        "promoCodes": {
          "type": "array",
          "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\nanymore and only be offered when one of the promo codes is given in the offer request.\nFor backward compatibility it is still not possible to set multiple promo codes.",
          "items": {
            "type": "string"
          },
          "x-nullable": true
        },
        "isSubjectToCityTax": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to city tax or not.\nDefault value is \u0060true\u0060",
          "x-nullable": true
        },
        "cancellationPolicyId": {
          "type": "string",
          "description": "The id of the cancellation policy valid for this rate plan"
        },
        "noShowPolicyId": {
          "type": "string",
          "description": "The id of the no-show policy valid for this rate plan",
          "x-nullable": true
        },
        "marketSegmentId": {
          "type": "string",
          "description": "The id of the market segment for this rate plan",
          "x-nullable": true
        },
        "isYieldable": {
          "type": "boolean",
          "description": "Whether the rate plan is subject to evaluation against hurdle rates when deciding on rate availability.\nDefault value is \u0060false\u0060",
          "x-nullable": true
        },
        "bookingPeriods": {
          "type": "array",
          "description": "Time periods when the rate plan is bookable",
          "items": {
            "$ref": "#/definitions/BookingPeriodModel"
          },
          "x-nullable": true
        },
        "restrictions": {
          "$ref": "#/definitions/BookingRestrictionsModel"
        },
        "includedServices": {
          "type": "array",
          "description": "Services that are included in the rate plan",
          "items": {
            "$ref": "#/definitions/RatePlanServiceModel"
          },
          "x-nullable": true
        },
        "companies": {
          "type": "array",
          "description": "Companies that can use this rate plan",
          "items": {
            "$ref": "#/definitions/ReplaceCompanyRatePlanModel"
          },
          "x-nullable": true
        },
        "pricingRule": {
          "$ref": "#/definitions/CreatePricingRuleModel"
        },
        "surcharges": {
          "type": "array",
          "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.\nThe values for \u0027adults\u0027 must be unique within the list and starting from occupancy of 2 adults. Values higher than the maximum unit group occupancy will be silently ignored.\nThe surcharges are required for all possible occupancies defined by the \u0027MaxPersons\u0027 of the unit group.",
          "items": {
            "$ref": "#/definitions/SurchargeModel"
          },
          "x-nullable": true
        },
        "ageCategories": {
          "type": "array",
          "description": "Additional charges per age category.",
          "items": {
            "$ref": "#/definitions/RatePlanAgeCategoryModel"
          },
          "x-nullable": true
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.",
          "items": {
            "$ref": "#/definitions/AccountingConfigModel"
          },
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "name": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "description": {
          "de": "Nicht Stornierbar",
          "en": "Non Refundable"
        },
        "minGuaranteeType": "PM6Hold",
        "priceCalculationMode": "Truncate",
        "channelCodes": [
          "Direct",
          "BookingCom",
          "Ibe"
        ],
        "cancellationPolicyId": "MUC-NONREF",
        "marketSegmentId": "BUSR",
        "isYieldable": false,
        "bookingPeriods": [
          {
            "from": "2026-10-26T10:02:24.1944764\u002B01:00",
            "to": "2026-11-09T10:02:24.1944764\u002B01:00"
          },
          {
            "from": "2026-11-12T10:02:24.1944764\u002B01:00",
            "to": "2027-01-01T10:02:24.1944764\u002B01:00"
          }
        ],
        "restrictions": {
          "minAdvance": {
            "hours": 12,
            "days": 180
          },
          "maxAdvance": {
            "months": 24
          }
        },
        "includedServices": [
          {
            "serviceId": "MUC-BRKF",
            "grossPrice": {
              "amount": 10.0,
              "currency": "EUR"
            }
          },
          {
            "serviceId": "MUC-WLAN",
            "grossPrice": {
              "amount": 5.0,
              "currency": "EUR"
            }
          }
        ],
        "companies": [
          {
            "id": "MUC-APA",
            "corporateCode": "APA-DBL"
          }
        ],
        "pricingRule": {
          "baseRatePlanId": "MUC-NONREF-SGL",
          "type": "Absolute",
          "value": 20.00
        },
        "surcharges": [
          {
            "adults": 2,
            "type": "Percent",
            "value": 10.0
          }
        ],
        "ageCategories": [
          {
            "id": "MUC-BABY",
            "surcharges": [
              {
                "adults": 1,
                "value": 10.0
              }
            ]
          },
          {
            "id": "MUC-CHILD",
            "surcharges": [
              {
                "adults": 1,
                "value": 40.0
              }
            ]
          }
        ]
      }
    },
    "RevenueAllocationModel": {
      "type": "object",
      "required": [
        "percent",
        "vatType"
      ],
      "properties": {
        "vatType": {
          "type": "string",
          "description": "The VAT type",
          "enum": [
            "Null",
            "VeryReduced",
            "Reduced",
            "Normal",
            "Without",
            "Special",
            "Special1",
            "Special2",
            "ReducedCovid19",
            "NormalCovid19",
            "Mixed"
          ]
        },
        "subAccountId": {
          "type": "string",
          "description": "The custom sub-account ID",
          "x-nullable": true
        },
        "percent": {
          "type": "integer",
          "description": "The percentage of revenue allocated to the VAT type",
          "format": "int32"
        }
      },
      "additionalProperties": false
    },
    "ScheduleCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The schedule ID"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-WIESN2026"
      }
    },
    "ScheduleItemModel": {
      "type": "object",
      "required": [
        "code",
        "id",
        "name",
        "propertyId",
        "validFrom",
        "validTo"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The schedule id"
        },
        "code": {
          "type": "string",
          "description": "The code for the schedule"
        },
        "name": {
          "type": "string",
          "description": "The name for the schedule",
          "minLength": 1
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the schedule was created"
        },
        "validFrom": {
          "type": "string",
          "description": "The first arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "validTo": {
          "type": "string",
          "description": "The last arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false
    },
    "ScheduleListModel": {
      "type": "object",
      "required": [
        "count",
        "schedules"
      ],
      "properties": {
        "schedules": {
          "type": "array",
          "description": "List of schedules",
          "items": {
            "$ref": "#/definitions/ScheduleItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "schedules": [
          {
            "id": "MUC-WIESN2026",
            "code": "WIESN2026",
            "name": "Oktoberfest 2026",
            "propertyId": "MUC",
            "validFrom": "2026-09-20",
            "validTo": "2026-10-05"
          }
        ],
        "count": 1
      }
    },
    "ScheduleModel": {
      "type": "object",
      "required": [
        "code",
        "id",
        "name",
        "propertyId",
        "validFrom",
        "validTo"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The schedule id"
        },
        "code": {
          "type": "string",
          "description": "The code for the schedule",
          "maxLength": 10,
          "minLength": 3,
          "pattern": "^[a-zA-Z0-9_]*$"
        },
        "name": {
          "type": "string",
          "description": "The name for the schedule",
          "minLength": 1
        },
        "propertyId": {
          "type": "string",
          "description": "The id of the property where the schedule was created"
        },
        "validFrom": {
          "type": "string",
          "description": "The first arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        },
        "validTo": {
          "type": "string",
          "description": "The last arrival date the schedule applies to, inclusive, interpreted in the property time zone",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-WIESN2026",
        "code": "WIESN2026",
        "name": "Oktoberfest 2026",
        "propertyId": "MUC",
        "validFrom": "2026-09-20",
        "validTo": "2026-10-05"
      }
    },
    "ServiceAccountingConfigModel": {
      "type": "object",
      "required": [
        "serviceType",
        "validFrom"
      ],
      "properties": {
        "vatType": {
          "type": "string",
          "description": "The VAT type - \u003Cb\u003EDEPRECATED: VatType is deprecated, use RevenueAllocation instead\u003C/b\u003E",
          "enum": [
            "Null",
            "VeryReduced",
            "Reduced",
            "Normal",
            "Without",
            "Special",
            "Special1",
            "Special2",
            "ReducedCovid19",
            "NormalCovid19",
            "Mixed"
          ],
          "x-nullable": true
        },
        "subAccountId": {
          "type": "string",
          "description": "The sub-accounts id - \u003Cb\u003EDEPRECATED: SubAccountId is deprecated, use RevenueAllocation instead\u003C/b\u003E",
          "x-nullable": true
        },
        "revenueAllocation": {
          "type": "array",
          "description": "Revenue allocation for the service",
          "items": {
            "$ref": "#/definitions/RevenueAllocationModel"
          },
          "x-nullable": true
        },
        "serviceType": {
          "type": "string",
          "description": "The service type",
          "enum": [
            "Other",
            "Accommodation",
            "FoodAndBeverages"
          ]
        },
        "validFrom": {
          "type": "string",
          "description": "Which date this configuration is valid from",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false,
      "example": {
        "state": "Unknown",
        "revenueAllocation": [
          {
            "vatType": "Normal",
            "subAccountId": "BEV",
            "percent": 30
          },
          {
            "vatType": "Reduced",
            "subAccountId": "FOOD",
            "percent": 70
          }
        ],
        "serviceType": "FoodAndBeverages",
        "validFrom": "2021-01-01"
      }
    },
    "ServiceCreatedModel": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The item id"
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-BRKF"
      }
    },
    "ServiceItemAccountingConfigModel": {
      "type": "object",
      "properties": {
        "revenueAllocation": {
          "type": "array",
          "description": "Revenue allocation for the service",
          "items": {
            "$ref": "#/definitions/RevenueAllocationModel"
          },
          "x-nullable": true
        },
        "serviceType": {
          "type": "string",
          "description": "The service type",
          "enum": [
            "Other",
            "Accommodation",
            "FoodAndBeverages"
          ]
        },
        "validFrom": {
          "type": "string",
          "description": "Which date this configuration is valid from",
          "format": "date",
          "example": "2020-10-10"
        }
      },
      "additionalProperties": false,
      "example": {
        "state": "Unknown",
        "revenueAllocation": [
          {
            "vatType": "Normal",
            "subAccountId": "BEV",
            "percent": 30
          },
          {
            "vatType": "Reduced",
            "subAccountId": "FOOD",
            "percent": 70
          }
        ],
        "serviceType": "FoodAndBeverages",
        "validFrom": "2021-01-01"
      }
    },
    "ServiceItemModel": {
      "type": "object",
      "required": [
        "availability",
        "code",
        "defaultGrossPrice",
        "description",
        "id",
        "name",
        "postNextDay",
        "property"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Id"
        },
        "name": {
          "type": "string",
          "description": "Name",
          "minLength": 1
        },
        "code": {
          "type": "string",
          "description": "The code for the service"
        },
        "description": {
          "type": "string",
          "description": "Description",
          "minLength": 1
        },
        "defaultGrossPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "pricingUnit": {
          "type": "string",
          "description": "Defines per which unit (flat, room, person) this item is offered and priced",
          "enum": [
            "Room",
            "Person"
          ]
        },
        "postNextDay": {
          "type": "boolean",
          "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day."
        },
        "serviceType": {
          "type": "string",
          "description": "The service type, used by accounting to determine the correct revenue account - \u003Cb\u003EDEPRECATED: ServiceType is deprecated, use AccountingConfig instead\u003C/b\u003E",
          "enum": [
            "Other",
            "Accommodation",
            "FoodAndBeverages"
          ],
          "x-nullable": true
        },
        "vatType": {
          "type": "string",
          "description": "The vat type, used by accounting to determine the correct vat amount and account - \u003Cb\u003EDEPRECATED: VatType is deprecated, use AccountingConfig instead\u003C/b\u003E",
          "enum": [
            "Null",
            "VeryReduced",
            "Reduced",
            "Normal",
            "Without",
            "Special",
            "Special1",
            "Special2",
            "ReducedCovid19",
            "NormalCovid19",
            "Mixed"
          ],
          "x-nullable": true
        },
        "availability": {
          "$ref": "#/definitions/AvailabilityModel"
        },
        "property": {
          "$ref": "#/definitions/EmbeddedPropertyModel"
        },
        "subAccountId": {
          "type": "string",
          "description": "ID of the custom sub-account, used by accounting to determine the correct revenue account - \u003Cb\u003EDEPRECATED: SubAccountId is deprecated, use AccountingConfig instead\u003C/b\u003E",
          "x-nullable": true
        },
        "accountingConfig": {
          "$ref": "#/definitions/ServiceItemAccountingConfigModel"
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the service is sold through",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          },
          "x-nullable": true
        },
        "ageCategoryId": {
          "type": "string",
          "description": "The id of the age category associated with this service.",
          "x-nullable": true
        }
      },
      "additionalProperties": false
    },
    "ServiceListModel": {
      "type": "object",
      "required": [
        "count",
        "services"
      ],
      "properties": {
        "services": {
          "type": "array",
          "description": "List of packages",
          "items": {
            "$ref": "#/definitions/ServiceItemModel"
          }
        },
        "count": {
          "type": "integer",
          "description": "Total count of items",
          "format": "int64"
        }
      },
      "additionalProperties": false,
      "example": {
        "services": [
          {
            "id": "MUC-WIFI",
            "name": "High Speed Wifi",
            "code": "WIFI",
            "description": "High speed wifi access for 24 hours, up to four devices.",
            "defaultGrossPrice": {
              "amount": 10.0,
              "currency": "EUR"
            },
            "pricingUnit": "Room",
            "postNextDay": false,
            "availability": {
              "mode": "Daily",
              "daysOfWeek": [
                "Saturday",
                "Sunday"
              ]
            },
            "property": {
              "id": "MUC",
              "code": "MUC",
              "name": "Demo Hotel Munich",
              "description": "This is the demo hotel Munich"
            },
            "accountingConfig": {
              "revenueAllocation": [
                {
                  "vatType": "Normal",
                  "subAccountId": "MUC-WF",
                  "percent": 100
                }
              ],
              "serviceType": "Other",
              "validFrom": "0001-01-01"
            },
            "channelCodes": [
              "Direct"
            ]
          },
          {
            "id": "MUC-BRKF",
            "name": "Breakfast",
            "code": "BRKF",
            "description": "Yummy yummy breakfast.",
            "defaultGrossPrice": {
              "amount": 20.0,
              "currency": "EUR"
            },
            "pricingUnit": "Person",
            "postNextDay": false,
            "availability": {
              "mode": "Daily",
              "quantity": 7,
              "daysOfWeek": [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday"
              ]
            },
            "property": {
              "id": "BER",
              "code": "BER",
              "name": "Demo Hotel Berlin",
              "description": "This is the demo hotel Berlin"
            },
            "accountingConfig": {
              "revenueAllocation": [
                {
                  "vatType": "Normal",
                  "percent": 70
                },
                {
                  "vatType": "Reduced",
                  "percent": 30
                }
              ],
              "serviceType": "FoodAndBeverages",
              "validFrom": "0001-01-01"
            },
            "channelCodes": [
              "Direct",
              "Ibe",
              "BookingCom",
              "ChannelManager"
            ]
          },
          {
            "id": "MUC-BRKF_CHILD",
            "name": "Breakfast for children.",
            "code": "BRKF_CHILD",
            "description": "Healthy breakfast for children.",
            "defaultGrossPrice": {
              "amount": 10.0,
              "currency": "EUR"
            },
            "pricingUnit": "Person",
            "postNextDay": false,
            "availability": {
              "mode": "Daily",
              "quantity": 7,
              "daysOfWeek": [
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday"
              ]
            },
            "property": {
              "id": "BER",
              "code": "BER",
              "name": "Demo Hotel Berlin",
              "description": "This is the demo hotel Berlin"
            },
            "accountingConfig": {
              "revenueAllocation": [
                {
                  "vatType": "Normal",
                  "percent": 70
                },
                {
                  "vatType": "Reduced",
                  "percent": 30
                }
              ],
              "serviceType": "FoodAndBeverages",
              "validFrom": "0001-01-01"
            },
            "channelCodes": [
              "Direct",
              "Ibe",
              "BookingCom",
              "ChannelManager"
            ],
            "ageCategoryId": "MUC-CHILD"
          }
        ],
        "count": 0
      }
    },
    "ServiceModel": {
      "type": "object",
      "required": [
        "accountingConfigs",
        "availability",
        "code",
        "defaultGrossPrice",
        "description",
        "id",
        "name",
        "postNextDay",
        "pricingUnit",
        "property"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The service id"
        },
        "code": {
          "type": "string",
          "description": "The code for the service"
        },
        "name": {
          "type": "object",
          "description": "The name for the service",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "description": {
          "type": "object",
          "description": "The description for the service",
          "additionalProperties": {
            "type": "string",
            "x-nullable": true
          }
        },
        "defaultGrossPrice": {
          "$ref": "#/definitions/MonetaryValueModel"
        },
        "pricingUnit": {
          "type": "string",
          "description": "Defines the granularity (room, person) for which this item is offered and priced",
          "enum": [
            "Room",
            "Person"
          ]
        },
        "postNextDay": {
          "type": "boolean",
          "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day."
        },
        "availability": {
          "$ref": "#/definitions/AvailabilityModel"
        },
        "accountingConfigs": {
          "type": "array",
          "description": "The collection of accounting configs with validity periods.",
          "items": {
            "$ref": "#/definitions/ServiceAccountingConfigModel"
          }
        },
        "property": {
          "$ref": "#/definitions/EmbeddedPropertyModel"
        },
        "channelCodes": {
          "type": "array",
          "description": "The channel codes the service is sold through. When no channels are defined, the service is sold only in a package",
          "items": {
            "type": "string",
            "description": "\u003Cb\u003EDeprecated values:\u003C/b\u003E Homelike: Homelike channel is deprecated and no longer accepts new bookings or rate plans.",
            "enum": [
              "Direct",
              "BookingCom",
              "Ibe",
              "ChannelManager",
              "Expedia",
              "Homelike",
              "Hrs",
              "AltoVita",
              "DesVu",
              "Gimsi"
            ]
          },
          "x-nullable": true
        },
        "ageCategoryId": {
          "type": "string",
          "description": "The id of the age category associated with this service.",
          "x-nullable": true
        }
      },
      "additionalProperties": false,
      "example": {
        "id": "MUC-BRKF_CHILD",
        "code": "BRKF_CHILD",
        "name": {
          "en": "Breakfast for children",
          "de": "Fr\u00FChst\u00FCck f\u00FCr Kinder"
        },
        "description": {
          "en": "Yummy yummy breakfast for children",
          "de": "Leckeres Fr\u00FChst\u00FCck f\u00FCr Kinder"
        },
        "defaultGrossPrice": {
          "amount": 20.0,
          "currency": "EUR"
        },
        "pricingUnit": "Person",
        "postNextDay": true,
        "availability": {
          "mode": "Daily",
          "quantity": 3,
          "daysOfWeek": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday"
          ]
        },
        "accountingConfigs": [
          {
            "state": "Unknown",
            "revenueAllocation": [
              {
                "vatType": "Normal",
                "subAccountId": "BEV",
                "percent": 30
              },
              {
                "vatType": "Reduced",
                "subAccountId": "FOOD",
                "percent": 70
              }
            ],
            "serviceType": "FoodAndBeverages",
            "validFrom": "2021-01-01"
          }
        ],
        "property": {
          "id": "MUC",
          "code": "MUC",
          "name": "Demo Hotel Munich",
          "description": "This is the demo hotel Munich"
        },
        "channelCodes": [
          "Direct",
          "Ibe",
          "BookingCom",
          "ChannelManager"
        ],
        "ageCategoryId": "MUC-CHILD"
      }
    },
    "SurchargeModel": {
      "type": "object",
      "required": [
        "adults",
        "type",
        "value"
      ],
      "properties": {
        "adults": {
          "type": "integer",
          "description": "The total numbers of adults",
          "format": "int32"
        },
        "type": {
          "type": "string",
          "description": "Specifies how to interpret \u0027Value\u0027",
          "enum": [
            "Absolute",
            "Percent"
          ]
        },
        "value": {
          "type": "number",
          "description": "The percent or absolute value (in the rate plan\u0027s currency) of the surcharge",
          "format": "double"
        }
      },
      "additionalProperties": false
    },
    "UpsertHurdleRatesRequestModel": {
      "type": "object",
      "required": [
        "hurdleRates",
        "propertyId",
        "unitGroupId"
      ],
      "properties": {
        "propertyId": {
          "type": "string",
          "description": "The property id"
        },
        "unitGroupId": {
          "type": "string",
          "description": "The unit group id"
        },
        "hurdleRates": {
          "type": "array",
          "description": "the collection of hurdle rates used calculations.",
          "maxItems": 730,
          "items": {
            "$ref": "#/definitions/HurdleRateModel"
          }
        }
      },
      "additionalProperties": false,
      "example": {
        "propertyId": "XT347518-1",
        "unitGroupId": "XT347518-1-1",
        "hurdleRates": [
          {
            "date": "2026-11-02",
            "amount": 100.00,
            "delta": 20.0,
            "ceiling": 2,
            "maxSolds": 8
          }
        ]
      }
    },
    "UpsertHurdleRatesResponseModel": {
      "type": "object",
      "properties": {
        "processed": {
          "type": "integer",
          "description": "The number of items that have been processed.",
          "format": "int32"
        },
        "created": {
          "type": "integer",
          "description": "The number of items that have been created.",
          "format": "int32"
        },
        "updated": {
          "type": "integer",
          "description": "The number of items that have been updated.",
          "format": "int32"
        }
      },
      "additionalProperties": false
    }
  },
  "securityDefinitions": {
    "oauth2": {
      "type": "oauth2",
      "flow": "implicit",
      "authorizationUrl": "https://identity.apaleo.com/connect/authorize",
      "scopes": {
        "admin": "Full access",
        "reservations.import": "Import reservations"
      }
    }
  },
  "tags": [
    {
      "name": "AgeCategory"
    },
    {
      "name": "CancellationPolicy"
    },
    {
      "name": "Company"
    },
    {
      "name": "CorporateCodes"
    },
    {
      "name": "HurdleRates"
    },
    {
      "name": "NoShowPolicy"
    },
    {
      "name": "PromoCodes"
    },
    {
      "name": "Rate"
    },
    {
      "name": "RatePlan"
    },
    {
      "name": "RatePlanActions"
    },
    {
      "name": "RatePlanSchedules"
    },
    {
      "name": "Schedule"
    },
    {
      "name": "Service"
    }
  ]
}