{ "swagger": "2.0", "info": { "title": "apaleo Inventory API", "description": "", "version": "v1" }, "host": "api.apaleo.com", "paths": { "/inventory/v1/properties": { "get": { "tags": [ "Property" ], "summary": "Get a properties list", "description": "Get the list of properties.
You need to be authorized (no particular scope required)", "operationId": "InventoryPropertiesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "status", "description": "Filter result by property status", "type": "array", "items": { "enum": [ "Test", "Live" ], "type": "string" } }, { "in": "query", "name": "includeArchived", "description": "Include archived properties in the result. If not set, or set to false, it only returns non-archived properties", "type": "boolean" }, { "in": "query", "name": "countryCode", "description": "Filter result by country code", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Return all properties.", "schema": { "$ref": "#/definitions/PropertyListModel" } }, "204": { "description": "There are no properties found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ ] } ] }, "post": { "tags": [ "Property" ], "summary": "Creates a property", "description": "Use this call to create a new property.
You must have at least one of these scopes: 'properties.create, setup.manage'.", "operationId": "InventoryPropertiesPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the property.", "required": true, "schema": { "$ref": "#/definitions/CreatePropertyModel" } } ], "responses": { "201": { "description": "Creation of the new property was successful.", "schema": { "$ref": "#/definitions/PropertyCreatedModel" }, "headers": { "Location": { "description": "The location of the created resource.", "type": "string" } } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "properties.create", "setup.manage", "admin" ] } ] } }, "/inventory/v1/properties/$count": { "get": { "tags": [ "Property" ], "summary": "Return total count of properties", "description": "Return total count of properties
You need to be authorized (no particular scope required)", "operationId": "InventoryProperties$countGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/CountModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ ] } ] } }, "/inventory/v1/properties/{id}": { "head": { "tags": [ "Property" ], "summary": "Check if a property exists", "description": "Check if a property exists by id.
You need to be authorized (no particular scope required)", "operationId": "InventoryPropertiesByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The id of the property.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The property exists." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ ] } ] }, "get": { "tags": [ "Property" ], "summary": "Get a property", "description": "Get a property by id.
You need to be authorized (no particular scope required)", "operationId": "InventoryPropertiesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "query", "name": "languages", "description": "'all' 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: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Return all the property data.", "schema": { "$ref": "#/definitions/PropertyModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ ] } ] }, "patch": { "tags": [ "Property" ], "summary": "Allows to modify property", "description": "Here's a list of allowed operations:\r\n- Replace Name\r\n- Add, replace and remove Description\r\n- Replace CompanyName\r\n- Add, replace and remove ManagingDirectors\r\n- Replace CommercialRegisterEntry\r\n- Replace TaxId\r\n- Replace Location\r\n- Add, replace and remove BankAccount\r\n- Replace PaymentTerms\r\n- Set IsTemplate
You must have at least one of these scopes: 'properties.manage, setup.manage'.", "operationId": "InventoryPropertiesByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the property.", "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" }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "properties.manage", "setup.manage", "admin" ] } ] } }, "/inventory/v1/types/countries": { "get": { "tags": [ "Types" ], "summary": "Returns a list of supported countries.", "description": "Returns a list of ISO country codes that could be used to create properties.
You need to be authorized (no particular scope required)", "operationId": "InventoryTypesCountriesGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CountryListModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ ] } ] } }, "/inventory/v1/units/{id}": { "patch": { "tags": [ "Unit" ], "summary": "Allows to patch unit", "description": "Here's a list of allowed operations:\r\n- Set unit condition\r\n- Set unit description\r\n- Set unit name\r\n- Set unit unitGroupId\r\n- Set unit maxPersons\r\n- Add unit attribute\r\n- Remove unit attribute
You must have at least one of these scopes: 'units.manage, setup.manage'.", "operationId": "InventoryUnitsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit.", "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": { "200": { "description": "Success" }, "204": { "description": "The unit was successfully modified." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.manage", "setup.manage", "admin" ] } ] }, "get": { "tags": [ "Unit" ], "summary": "Get a unit", "description": "Get a unit by id.
You must have at least one of these scopes: 'units.read, setup.read, setup.manage'.", "operationId": "InventoryUnitsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit.", "required": true, "type": "string" }, { "in": "query", "name": "languages", "description": "'all' 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, unitGroup. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "property", "unitGroup" ], "type": "string" } } ], "responses": { "200": { "description": "Return all the unit data.", "schema": { "$ref": "#/definitions/UnitModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.read", "setup.read", "setup.manage", "admin" ] } ] }, "head": { "tags": [ "Unit" ], "summary": "Check if a unit exists", "description": "Check if a unit exists by id.
You must have at least one of these scopes: 'units.read, setup.read, setup.manage'.", "operationId": "InventoryUnitsByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The unit exists." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.read", "setup.read", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "Unit" ], "summary": "Delete a unit", "description": "Use this call to delete a unit.
You must have at least one of these scopes: 'units.delete, setup.manage'.", "operationId": "InventoryUnitsByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the unit was successful." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.delete", "setup.manage", "admin" ] } ] } }, "/inventory/v1/units": { "patch": { "tags": [ "Unit" ], "summary": "Allows to patch one or more units", "description": "Here's a list of allowed operations:\r\n- Set unit condition\r\n- Set unit description\r\n- Set unit name\r\n- Set unit unitGroupId\r\n- Set unit maxPersons\r\n- Add unit attribute\r\n- Remove unit attribute
You must have at least one of these scopes: 'units.manage, setup.manage'.", "operationId": "InventoryUnitsPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "unitIds", "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": "Units were successfully modified." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.manage", "setup.manage", "admin" ] } ] }, "get": { "tags": [ "Unit" ], "summary": "Get a units list", "description": "Get the list of units.
You must have at least one of these scopes: 'units.read, setup.read, setup.manage'.", "operationId": "InventoryUnitsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Return units for specific property", "type": "string" }, { "in": "query", "name": "unitGroupId", "description": "Return units for the specific unit group - DEPRECATED: This property will be removed 20.04.2022. Use `UnitGroupIds` instead", "type": "string" }, { "in": "query", "name": "unitGroupIds", "description": "Return units with the specific unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitAttributeIds", "description": "Return units with the specific unit attributes", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "isOccupied", "description": "Return only occupied or vacant units", "type": "boolean" }, { "in": "query", "name": "maintenanceType", "description": "Return units with the specific maintenance type", "type": "string", "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ] }, { "in": "query", "name": "condition", "description": "Return units with a specific condition", "type": "string", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ] }, { "in": "query", "name": "textSearch", "description": "This will filter all units where the provided text is contained in the unit name. The search is case insensitive.", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: property, unitGroup. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "property", "unitGroup" ], "type": "string" } } ], "responses": { "200": { "description": "Return all units.", "schema": { "$ref": "#/definitions/UnitListModel" } }, "204": { "description": "No units were found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.read", "setup.read", "setup.manage", "admin" ] } ] }, "post": { "tags": [ "Unit" ], "summary": "Create a unit", "description": "Use this call to create a new unit.
You must have at least one of these scopes: 'units.create, setup.manage'.", "operationId": "InventoryUnitsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the unit.", "required": true, "schema": { "$ref": "#/definitions/CreateUnitModel" } } ], "responses": { "201": { "description": "Creation of the new unit was successful.", "schema": { "$ref": "#/definitions/UnitCreatedModel" }, "headers": { "Location": { "description": "The location of the created resource.", "type": "string" } } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.create", "setup.manage", "admin" ] } ] } }, "/inventory/v1/units/$count": { "get": { "tags": [ "Unit" ], "summary": "Returns number of units", "description": "Returns number of units matching the filter criteria
You must have at least one of these scopes: 'units.read, setup.read, setup.manage'.", "operationId": "InventoryUnits$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Return units for specific property", "type": "string" }, { "in": "query", "name": "unitGroupId", "description": "Return units for the specific unit group - DEPRECATED: This property will be removed 20.04.2022. Use `UnitGroupIds` instead", "type": "string" }, { "in": "query", "name": "unitGroupIds", "description": "Return units with the specific unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitAttributeIds", "description": "Return units with the specific unit attributes", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "isOccupied", "description": "Return only occupied or vacant units", "type": "boolean" }, { "in": "query", "name": "maintenanceType", "description": "Return units with the specific maintenance type", "type": "string", "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ] }, { "in": "query", "name": "condition", "description": "Return units with a specific condition", "type": "string", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ] }, { "in": "query", "name": "textSearch", "description": "This will filter all units where the provided text is contained in the unit name. The search is case insensitive.", "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/CountModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.read", "setup.read", "setup.manage", "admin" ] } ] } }, "/inventory/v1/units/bulk": { "post": { "tags": [ "Unit" ], "summary": "Create multiple units", "description": "Use this call to create multiple units, following a naming rule.
You must have at least one of these scopes: 'units.create, setup.manage'.", "operationId": "InventoryUnitsBulkPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the units.", "required": true, "schema": { "$ref": "#/definitions/BulkCreateUnitsModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/BulkUnitsCreatedModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "units.create", "setup.manage", "admin" ] } ] } }, "/inventory/v1/unit-attributes/{id}": { "get": { "tags": [ "UnitAttribute" ], "summary": "Get unit attribute by id", "description": "Get unit attribute by id
You must have at least one of these scopes: 'unitattributes.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-attributesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit attribute", "required": true, "type": "string" } ], "responses": { "200": { "description": "Returns unit attribute with specified id", "schema": { "$ref": "#/definitions/UnitAttributeDefinitionModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.read", "setup.read", "setup.manage", "admin" ] } ] }, "patch": { "tags": [ "UnitAttribute" ], "summary": "Allows to modify unit attribute", "description": "Here's a list of allowed operations:\r\n- Replace / Remove Description
You must have at least one of these scopes: 'unitattributes.manage, setup.manage'.", "operationId": "InventoryUnit-attributesByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of unit attribute", "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" }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.manage", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "UnitAttribute" ], "summary": "Deletes unit attribute", "description": "Deletes unit attribute
You must have at least one of these scopes: 'unitattributes.delete, setup.manage'.", "operationId": "InventoryUnit-attributesByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of unit attribute", "required": true, "type": "string" } ], "responses": { "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.delete", "setup.manage", "admin" ] } ] }, "head": { "tags": [ "UnitAttribute" ], "summary": "Check if a unit attribute exists", "description": "Check if a unit attribute exists
You must have at least one of these scopes: 'unitattributes.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-attributesByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit attribute.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The unit attribute exists." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.read", "setup.read", "setup.manage", "admin" ] } ] } }, "/inventory/v1/unit-attributes": { "get": { "tags": [ "UnitAttribute" ], "summary": "Get unit attribute list", "description": "Get unit attribute list
You must have at least one of these scopes: 'unitattributes.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-attributesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Returns unit attribute list for given account", "schema": { "$ref": "#/definitions/UnitAttributeDefinitionListModel" } }, "204": { "description": "No unit attributes present for given account" }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.read", "setup.read", "setup.manage", "admin" ] } ] }, "post": { "tags": [ "UnitAttribute" ], "summary": "Create a unit attribute", "description": "Use this call to create a new unit attribute.
You must have at least one of these scopes: 'unitattributes.create, setup.manage'.", "operationId": "InventoryUnit-attributesPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The unit attribute.", "required": true, "schema": { "$ref": "#/definitions/CreateUnitAttributeDefinitionModel" } } ], "responses": { "201": { "description": "Creation of the new unit attribute was successful.", "schema": { "$ref": "#/definitions/UnitAttributeDefinitionCreatedModel" }, "headers": { "Location": { "description": "The location of the created resource.", "type": "string" } } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitattributes.create", "setup.manage", "admin" ] } ] } }, "/inventory/v1/unit-groups": { "post": { "tags": [ "UnitGroup" ], "summary": "Create a unit group", "description": "Use this call to create a new unit group.
You must have at least one of these scopes: 'unitgroups.create, setup.manage'.", "operationId": "InventoryUnit-groupsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the unit group.", "required": true, "schema": { "$ref": "#/definitions/CreateUnitGroupModel" } } ], "responses": { "201": { "description": "Creation of the new unit group was successful.", "schema": { "$ref": "#/definitions/UnitGroupCreatedModel" }, "headers": { "Location": { "description": "The location of the created resource.", "type": "string" } } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.create", "setup.manage", "admin" ] } ] }, "get": { "tags": [ "UnitGroup" ], "summary": "Get all unit groups, or all unit groups for a property", "description": "Get the list of unit groups.
You must have at least one of these scopes: 'unitgroups.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-groupsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Return unit groups for specific property", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "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": { "enum": [ "property" ], "type": "string" } } ], "responses": { "200": { "description": "Return all unit groups.", "schema": { "$ref": "#/definitions/UnitGroupListModel" } }, "204": { "description": "There are no unit groups found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.read", "setup.read", "setup.manage", "admin" ] } ] } }, "/inventory/v1/unit-groups/$count": { "get": { "tags": [ "UnitGroup" ], "summary": "Returns number of unit groups", "description": "Returns number of unit groups matching the filter criteria
You must have at least one of these scopes: 'unitgroups.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-groups$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Return unit groups for specific property", "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/CountModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.read", "setup.read", "setup.manage", "admin" ] } ] } }, "/inventory/v1/unit-groups/{id}": { "head": { "tags": [ "UnitGroup" ], "summary": "Check if a unit group exists", "description": "Check if a unit group exists by id.
You must have at least one of these scopes: 'unitgroups.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-groupsByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit group.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The unit group exists." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.read", "setup.read", "setup.manage", "admin" ] } ] }, "get": { "tags": [ "UnitGroup" ], "summary": "Get a unit group", "description": "Get a unit group by id.
You must have at least one of these scopes: 'unitgroups.read, setup.read, setup.manage'.", "operationId": "InventoryUnit-groupsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit group.", "required": true, "type": "string" }, { "in": "query", "name": "languages", "description": "'all' 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": { "enum": [ "property" ], "type": "string" } } ], "responses": { "200": { "description": "Return all the unit group data.", "schema": { "$ref": "#/definitions/UnitGroupModel" } }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.read", "setup.read", "setup.manage", "admin" ] } ] }, "put": { "tags": [ "UnitGroup" ], "summary": "Replace a unit group", "description": "Use this call to modify a unit group.
You must have at least one of these scopes: 'unitgroups.manage, setup.manage'.", "operationId": "InventoryUnit-groupsByIdPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit group.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the unit group.", "required": true, "schema": { "$ref": "#/definitions/ReplaceUnitGroupModel" } } ], "responses": { "200": { "description": "Success" }, "204": { "description": "Replace of the unit group was successful." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "415": { "description": "Unsupported media type." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.manage", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "UnitGroup" ], "summary": "Delete a unit group", "description": "Use this call to delete a unit group.
You must have at least one of these scopes: 'unitgroups.delete, setup.manage'.", "operationId": "InventoryUnit-groupsByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the unit group.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the unit group was successful." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "The Request-URI could not be found." }, "422": { "description": "Validation errors in the request body or query params.", "schema": { "$ref": "#/definitions/MessageItemCollection" } }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "unitgroups.delete", "setup.manage", "admin" ] } ] } }, "/settings/v1/age-categories/{id}": { "get": { "tags": [ "AgeCategory" ], "summary": "Get an age category", "description": "Get an age category by id.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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": "'all' 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." }, "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:\r\n- Replace name, minimum age and maximum age


You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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." }, "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\r\nplan to define age specific prices.

You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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." }, "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/v1/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\r\nallowed values span from 0 to 17.

You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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." }, "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.

You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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." }, "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/v1/cancellation-policies": { "post": { "tags": [ "CancellationPolicy" ], "summary": "Create a cancellation policy.", "description": "Create a cancellation policy.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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." }, "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.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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/v1/cancellation-policies/{id}": { "get": { "tags": [ "CancellationPolicy" ], "summary": "Get a specific cancellation policy.", "description": "Get a specific cancellation policy.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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": "'all' 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." }, "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:\r\n- Replace name and description\r\n- Replace the period from reference\r\n- Replace the reference\r\n- Replace the fee details: fixed and percent values
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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." }, "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.
You must have this scope: 'setup.manage'.", "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." }, "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/v1/companies": { "post": { "tags": [ "Company" ], "summary": "Create a company", "description": "Use this call to create a new company.
You must have at least one of these scopes: 'companies.create, companies.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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" } } }, "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." }, "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.

You must have at least one of these scopes: 'companies.read, companies.manage'.", "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", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "textSearch", "description": "This will filter all companies for the provided free text.\r\nCurrently it only looks up if the company name contains one of the provided values", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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/v1/companies/{id}": { "get": { "tags": [ "Company" ], "summary": "Get a company", "description": "Get a company by ID.
You must have at least one of these scopes: 'companies.read, companies.manage'.", "operationId": "RateplanCompaniesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the company.", "required": true, "type": "string" } ], "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." }, "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:\r\n- Replace name, address, tax ID\r\n- Add and remove rate plans
You must have this scope: 'companies.manage'.", "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" }, "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." }, "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.\r\nWarning: This operation also removes company from all rate plans if not yet used.\r\nThe deleted company won't be available in the company VAT report anymore.
You must have this scope: 'companies.manage'.", "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." }, "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/v1/corporate-codes/codes": { "get": { "tags": [ "CorporateCodes" ], "summary": "Returns a list of corporate codes.", "description": "Returns all existing corporate codes that match given criteria.
You must have this scope: 'rateplans.read-corporate'.", "operationId": "RateplanCorporate-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, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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/v1/no-show-policies": { "post": { "tags": [ "NoShowPolicy" ], "summary": "Create a no-show policy.", "description": "Create a no-show policy.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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." }, "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.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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/v1/no-show-policies/{id}": { "get": { "tags": [ "NoShowPolicy" ], "summary": "Get a specific no-show policy.", "description": "Get a specific no-show policy.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "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": "'all' 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." }, "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:\r\n- Replace name and description\r\n- Replace the fee details: fixed and percent values
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "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." }, "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.
You must have this scope: 'setup.manage'.", "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." }, "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/v1/promo-codes/codes": { "get": { "tags": [ "PromoCodes" ], "summary": "Returns a list of promo codes.", "description": "Returns all existing promo codes that match given criteria.
You must have this scope: 'rateplans.read-corporate'.", "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, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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/v1/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\r\nbeen initialized, it will still be returned, but anything besides the from and to values will be empty.\r\nThe time range of a rate is defined by the time slice definition of the rate plan.
\r\nTime ranges with no initialized rates will not be available for sell.

\r\nTo be able to read rates for a corporate rate plan a client must additionally have\r\nthe 'rateplans.read-corporate' scope.
You must have at least one of these scopes: 'rates.read, rates.manage'.", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "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." }, "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.\r\n

\r\nMake sure that the from and to date and time in the rates match the time slice definition of the rate plan.\r\nThe easiest way to achieve this is calling the GET /rate-plans/{id}/rates for the time range you want to update\r\nand then resend the payload with the set prices and restrictions.
You must have this scope: 'rates.manage'.", "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": { "200": { "description": "Success" }, "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." }, "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.
You must have at least one of these scopes: 'rates.delete, rates.manage'.", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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." }, "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/v1/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\r\nthe 'rateplans.read-corporate' scope.
You must have at least one of these scopes: 'rates.read, rates.manage'.", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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." }, "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/v1/rates": { "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.\r\nHere is the list of operations that are currently allowed:\r\n- Add, replace and remove Price\r\n- Add, replace and remove Restrictions
You must have this scope: 'rates.manage'.", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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\r\nthe specified date and optional time will be affected
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "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": { "enum": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ], "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." }, "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/v1/rate-plans": { "get": { "tags": [ "RatePlan" ], "summary": "Get a rate plan list", "description": "Get the list of rate plans depending on client scopes.

\r\n \r\nIf a client has no additional scopes, only public rate plans are returned.
\r\nThe 'rateplans.read-corporate' scope adds corporate rate plans to the response.
You must have at least one of these scopes: 'rateplans.read, setup.read, setup.manage'.", "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": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "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": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "minGuaranteeTypes", "description": "Return rate plans with any of the specified min guarantee types", "type": "array", "items": { "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" } }, { "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.
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "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": { "enum": [ "property", "unitGroup", "cancellationPolicy", "services", "bookingPeriods", "surcharges", "ageCategories" ], "type": "string" } } ], "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." }, "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.
You must have at least one of these scopes: 'rateplans.create, setup.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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." }, "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:\r\n- Replace Name\r\n- Replace Description\r\n- Replace MinGuaranteeType\r\n- Replace PriceCalculationMode\r\n- Replace CancellationPolicy\r\n- Replace NoShowPolicy\r\n- Replace ChannelCodes\r\n- Replace Companies\r\n- Add, replace and remove PromoCode\r\n- Add, replace and remove Restrictions\r\n- Add, replace and remove BookingPeriods\r\n- Add, replace and remove IsSubjectToCityTax\r\n- Add, replace and remove PricingRule\r\n- Add, replace and remove Surcharges\r\n- Add, replace and remove AgeCategories\r\n- Add, replace and remove IncludedServices\r\n- Add/Replace/Remove/Update AccountingConfigs
You must have at least one of these scopes: 'rateplans.manage, setup.manage'.", "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." }, "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.manage", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "RatePlan" ], "summary": "Delete multiple rate plans", "description": "Use this call to delete multiple rate plans.
You must have at least one of these scopes: 'rateplans.delete, setup.manage'.", "operationId": "RateplanRate-plansDelete", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "ratePlanIds", "description": "The ids of the rate plans.", "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." }, "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/v1/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

\r\n \r\nIf a client has no additional scopes, only public rate plans are counted.
\r\nThe 'rateplans.read-corporate' scope adds corporate rate plans to the result number.
You must have at least one of these scopes: 'rateplans.read, setup.read, setup.manage'.", "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": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "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": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "minGuaranteeTypes", "description": "Return rate plans with any of the specified min guarantee types", "type": "array", "items": { "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" } }, { "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.
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "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." }, "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/v1/rate-plans/{id}": { "head": { "tags": [ "RatePlan" ], "summary": "Check if a rate plan exists", "description": "Check if a rate plan exists by id.

\r\n \r\nTo be able to check if a corporate rate plan exists\r\na client must additionaly have 'rateplans.read-corporate' scope assigned.
You must have at least one of these scopes: 'rateplans.read, setup.read, setup.manage'.", "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." }, "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.

\r\n \r\nTo be able to read a corporate rate plan a client must additionaly have\r\n'rateplans.read-corporate' scope assigned.
You must have at least one of these scopes: 'rateplans.read, setup.read, setup.manage'.", "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": "'all' 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": { "enum": [ "property", "cancellationPolicy" ], "type": "string" } } ], "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." }, "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.
You must have at least one of these scopes: 'rateplans.manage, setup.manage'.", "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": { "200": { "description": "Success" }, "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." }, "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.manage", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "RatePlan" ], "summary": "Delete a rate plan", "description": "Use this call to delete a rate plan.
You must have at least one of these scopes: 'rateplans.delete, setup.manage'.", "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." }, "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/v1/rateplan-codes": { "get": { "tags": [ "RatePlanCodes" ], "summary": "Returns a list of rate plan codes.", "description": "Returns all existing rate plan codes that match given criteria.
You must have at least one of these scopes: 'rateplans.read, setup.read, setup.manage'.", "operationId": "RateplanRateplan-codesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Return codes for a specific property", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "A collection of rate plan codes.", "schema": { "$ref": "#/definitions/RatePlanCodeListModel" } }, "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." }, "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/v1/services": { "post": { "tags": [ "Service" ], "summary": "Create a service.", "description": "Create a service.
You must have at least one of these scopes: 'services.create, setup.manage'.", "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'll always send back the same response for requests made with the same key, \nand keys can't 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." }, "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.
You must have at least one of these scopes: 'services.read, setup.read, setup.manage'.", "operationId": "RateplanServicesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter services by the specified property", "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": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "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": { "enum": [ "property" ], "type": "string" } } ], "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." }, "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/v1/services/{id}": { "patch": { "tags": [ "Service" ], "summary": "Modify a service.", "description": "Here is the list of operations that are currently allowed:\r\n- Replace Name\r\n- Replace Description\r\n- Replace DefaultGrossPrice\r\n- Replace PricingUnit\r\n- Replace PostNextDay\r\n- Replace Availability\r\n- Add/Replace/Remove/Update AccountingConfigs\r\n- Replace ChannelCodes
You must have at least one of these scopes: 'services.manage, setup.manage'.", "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." }, "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.
You must have at least one of these scopes: 'services.read, setup.read, setup.manage'.", "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": "'all' 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": { "enum": [ "property" ], "type": "string" } } ], "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." }, "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.
You must have at least one of these scopes: 'services.read, setup.read, setup.manage'.", "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." }, "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.
You must have at least one of these scopes: 'services.create, setup.manage'.", "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." }, "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/v1/services/$count": { "get": { "tags": [ "Service" ], "summary": "Returns number of services.", "description": "Returns number of services
You must have at least one of these scopes: 'services.read, setup.read, setup.manage'.", "operationId": "RateplanServices$countGet", "produces": [ "application/json" ], "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." }, "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" ] } ] } }, "/booking/v1/blocks": { "post": { "tags": [ "Block" ], "summary": "Creates a block", "description": "
You must have at least one of these scopes: 'blocks.create, reservations.manage'.", "operationId": "BookingBlocksPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The details for the block you want to create.", "required": true, "schema": { "$ref": "#/definitions/CreateBlockModel" } } ], "responses": { "201": { "description": "The block was created successfully.", "schema": { "$ref": "#/definitions/BlockCreatedModel" }, "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." }, "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": [ "blocks.create", "reservations.manage", "admin" ] } ] }, "get": { "tags": [ "Block" ], "summary": "Returns a list of blocks", "description": "Returns a list of all blocks, filtered by the specified parameters. If no parameters are set, returns the entire list.
You must have at least one of these scopes: 'blocks.read, reservations.read, reservations.manage'.", "operationId": "BookingBlocksGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "groupId", "description": "Return blocks for the specific group", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Return blocks filtered by properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "status", "description": "Return blocks filtered by statuses", "type": "array", "items": { "enum": [ "Tentative", "Definite", "Canceled" ], "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "Return blocks with any of the specified unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "ratePlanIds", "description": "Return blocks with any of the specified rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "Return blocks with any of the specified time slice definitions", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "Return blocks with any of the specified unit group types", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "from", "description": "The start of the time range. All blocks that are overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time range. All blocks that are overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions, timeSlices. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions", "timeSlices" ], "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/BlockListModel" } }, "204": { "description": "No blocks found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/blocks/$count": { "get": { "tags": [ "Block" ], "summary": "Returns number of blocks", "description": "Returns number of blocks matching the filter criteria
You must have at least one of these scopes: 'blocks.read, reservations.read, reservations.manage'.", "operationId": "BookingBlocks$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "groupId", "description": "Return blocks for the specific group", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Return blocks filtered by properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "status", "description": "Return blocks filtered by statuses", "type": "array", "items": { "enum": [ "Tentative", "Definite", "Canceled" ], "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "Return blocks with any of the specified unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "ratePlanIds", "description": "Return blocks with any of the specified rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "Return blocks with any of the specified time slice definitions", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "Return blocks with any of the specified unit group types", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "from", "description": "The start of the time range. All blocks that are overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time range. All blocks that are overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" } ], "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." }, "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": [ "blocks.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/blocks/{id}": { "get": { "tags": [ "Block" ], "summary": "Returns a specific block.", "description": "Retrieves a block, specified by its ID.
You must have at least one of these scopes: 'blocks.read, reservations.read, reservations.manage'.", "operationId": "BookingBlocksByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block to be retrieved.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions, timeSlices. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions", "timeSlices" ], "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/BlockModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.read", "reservations.read", "reservations.manage", "admin" ] } ] }, "patch": { "tags": [ "Block" ], "summary": "Allows to modify the block [DEPRECATED]", "description": "This endpoint is obsolete. It will be removed 10.05.2022. Use `PUT /booking/v1/block-actions/{id}/amend` instead.
You can replace From, To, GrossDailyRate and BlockedUnits
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlocksByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block 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." }, "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" } } }, "deprecated": true, "security": [ { "oauth2": [ "blocks.manage", "reservations.manage", "admin" ] } ] }, "delete": { "tags": [ "Block" ], "summary": "Delete a specific block", "description": "Use this call to delete a block. This is only possible as long as no reservation was picked up yet even if all of\r\nthem are canceled
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlocksByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the block.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the block was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] }, "head": { "tags": [ "Block" ], "summary": "Check if a block exists", "description": "Check if a block exists by id
You must have at least one of these scopes: 'blocks.read, reservations.read, reservations.manage'.", "operationId": "BookingBlocksByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The id of the block.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The block exists." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "blocks.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/block-actions/{id}/confirm": { "put": { "tags": [ "BlockActions" ], "summary": "Confirm a block.", "description": "Confirm a specific block which is in status 'Tentative'.\r\nThis changes the status to 'Definite'.
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlock-actionsByIdConfirmPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Confirmation of the block was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/block-actions/{id}/release": { "put": { "tags": [ "BlockActions" ], "summary": "Release a block.", "description": "Release a specific block which is in status 'Definite'.\r\nThis changes the status to 'Tentative'.
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlock-actionsByIdReleasePut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Release of the block was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/block-actions/{id}/cancel": { "put": { "tags": [ "BlockActions" ], "summary": "Cancel a block.", "description": "Cancel a specific block which is in status 'Definite' or 'Tentative'.\r\nThis changes the status to 'Canceled'.
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlock-actionsByIdCancelPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Cancellation of the block was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/block-actions/{id}/wash": { "put": { "tags": [ "BlockActions" ], "summary": "Wash a block.", "description": "Wash a specific block which is in status 'Definite'.\r\nThis releases all unpicked units.
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlock-actionsByIdWashPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Wash of the block was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/block-actions/{id}/amend": { "put": { "tags": [ "BlockActions" ], "summary": "Allow to modify a block", "description": "Use this call to modify a block.
You must have at least one of these scopes: 'blocks.manage, reservations.manage'.", "operationId": "BookingBlock-actionsByIdAmendPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the block to be modified.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the block.", "required": true, "schema": { "$ref": "#/definitions/ReplaceBlockModel" } } ], "responses": { "204": { "description": "Replace of the block 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." }, "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": [ "blocks.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/bookings": { "post": { "tags": [ "Booking" ], "summary": "Creates a booking for one or more reservations.", "description": "Creates a booking taking a list of reservations as input
You must have at least one of these scopes: 'reservations.create, reservations.manage'.", "operationId": "BookingBookingsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The list of reservations you want to create.", "required": true, "schema": { "$ref": "#/definitions/CreateBookingModel" } } ], "responses": { "201": { "description": "All new reservations were created.", "schema": { "$ref": "#/definitions/BookingCreatedModel" }, "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." }, "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": [ "reservations.create", "reservations.manage", "admin" ] } ] }, "get": { "tags": [ "Booking" ], "summary": "Returns a list of all bookings, filtered by the specified parameters.", "description": "Returns a list of all bookings, filtered by the specified parameters. If no parameters are set, returns the entire list.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingBookingsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "reservationId", "description": "Filter result by reservation id. The result set will contain all bookings having reservations with the specified id", "type": "string" }, { "in": "query", "name": "groupId", "description": "Filter result by group id. The result set will contain all bookings having groups with the specified id", "type": "string" }, { "in": "query", "name": "channelCode", "description": "Filter result by the channel code. The resul set will contain all bookings having reservations with the specified channel code", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "externalCode", "description": "Filter result by the external code. The result set will contain all bookings having reservations with external code starting with provided value", "type": "string" }, { "in": "query", "name": "textSearch", "description": "This will filter all bookings for the provided free text. Currently it only looks up if either the lastname, firstname, email or company name of the booker\r\ncontains one of the provided values", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: property, unitGroup, ratePlan, services, reservations. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "property", "unitGroup", "ratePlan", "services", "reservations" ], "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/BookingListModel" } }, "204": { "description": "No bookings found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/bookings/$force": { "post": { "tags": [ "Booking" ], "summary": "Creates a booking for one or more reservations regardless of availability or restrictions.", "description": "Creates a booking taking a list of reservations as input
You must have at least one of these scopes: 'reservations.force-create, reservations.force-manage'.", "operationId": "BookingBookings$forcePost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The list of reservations you want to create.", "required": true, "schema": { "$ref": "#/definitions/CreateBookingModel" } } ], "responses": { "201": { "description": "All new reservations were created.", "schema": { "$ref": "#/definitions/BookingCreatedModel" }, "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." }, "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": [ "reservations.force-create", "reservations.force-manage", "admin" ] } ] } }, "/booking/v1/bookings/{id}/reservations": { "post": { "tags": [ "Booking" ], "summary": "Add one or multiple reservations to an existing booking.", "description": "Creates new reservations and adds them to an existing booking taking a list of reservations as input
You must have at least one of these scopes: 'reservations.create, reservations.manage'.", "operationId": "BookingBookingsByIdReservationsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the booking the reservations should be attached to.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The list of reservations you want to add.", "required": true, "schema": { "$ref": "#/definitions/AddReservationsModel" } } ], "responses": { "201": { "description": "All new reservations were created and added to the booking.", "schema": { "$ref": "#/definitions/ReservationsCreatedModel" }, "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." }, "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": [ "reservations.create", "reservations.manage", "admin" ] } ] } }, "/booking/v1/bookings/{id}/reservations/$force": { "post": { "tags": [ "Booking" ], "summary": "Add one or multiple reservations to an existing booking regardless of availability or restrictions.", "description": "Creates new reservations and adds them to an existing booking taking a list of reservations as input
You must have at least one of these scopes: 'reservations.force-create, reservations.force-manage'.", "operationId": "BookingBookingsByIdReservations$forcePost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the booking the reservations should be attached to.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The list of reservations you want to add.", "required": true, "schema": { "$ref": "#/definitions/AddReservationsModel" } } ], "responses": { "201": { "description": "All new reservations were created and added to the booking.", "schema": { "$ref": "#/definitions/ReservationsCreatedModel" }, "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." }, "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": [ "reservations.force-create", "reservations.force-manage", "admin" ] } ] } }, "/booking/v1/bookings/{id}": { "get": { "tags": [ "Booking" ], "summary": "Returns a specific booking.", "description": "Retrieves a booking with all its reservations.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingBookingsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the booking to be retrieved.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: property, unitGroup, ratePlan, services, reservations, propertyValues. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "property", "unitGroup", "ratePlan", "services", "reservations", "propertyValues" ], "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/BookingModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] }, "patch": { "tags": [ "Booking" ], "summary": "Allows to modify certain booking properties", "description": "Here is the list of operations that are currently allowed:\r\n- Add, replace and remove PaymentAccount\r\n- Add, replace and remove Comment\r\n- Add, replace and remove BookerComment\r\n- Copy PaymentAccount, Comment and BookerComment from the booking to any reservation, or the other way around\r\n- Replace Booker
You must have this scope: 'reservations.manage'.", "operationId": "BookingBookingsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the booking 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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/groups": { "post": { "tags": [ "Group" ], "summary": "Creates a group booking.", "description": "
You must have at least one of these scopes: 'groups.create, reservations.manage'.", "operationId": "BookingGroupsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The details of the group that should be created.", "required": true, "schema": { "$ref": "#/definitions/CreateGroupModel" } } ], "responses": { "201": { "description": "A new group booking was created.", "schema": { "$ref": "#/definitions/GroupCreatedModel" }, "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." }, "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": [ "groups.create", "reservations.manage", "admin" ] } ] }, "get": { "tags": [ "Group" ], "summary": "Returns a list of all group bookings, filtered by the specified parameters.", "description": "Returns a list of all group bookings, filtered by the specified parameters.\r\nIf no parameters are set, returns the entire list
You must have at least one of these scopes: 'groups.read, reservations.read, reservations.manage'.", "operationId": "BookingGroupsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "textSearch", "description": "This will filter all group bookings for the provided free text. Currently it only looks up if either the group name, lastname,\r\nfirstname, email or company name of the booker contains one of the provided values", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Filter result by requested properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "from", "description": "The start of the time range. All groups that have blocks overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time range. All groups that have blocks overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: blocks, actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "blocks", "actions" ], "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/GroupListModel" } }, "204": { "description": "No group bookings found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "groups.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/groups/{id}": { "get": { "tags": [ "Group" ], "summary": "Returns a specific group booking.", "description": "Retrieves a specific group booking with all its related blocks
You must have at least one of these scopes: 'groups.read, reservations.read, reservations.manage'.", "operationId": "BookingGroupsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the group booking to be retrieved.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: blocks, actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "blocks", "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/GroupModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "groups.read", "reservations.read", "reservations.manage", "admin" ] } ] }, "patch": { "tags": [ "Group" ], "summary": "Allows to modify certain group booking properties", "description": "Here is the list of operations that are currently allowed:\r\n- Add and replace Name\r\n- Add, replace and remove Comment\r\n- Add, replace and remove BookerComment\r\n- Add, replace and remove PaymentAccount\r\n- Add, replace and remove PropertyIds\r\n- Replace Booker
You must have at least one of these scopes: 'groups.manage, reservations.manage'.", "operationId": "BookingGroupsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the group booking 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." }, "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": [ "groups.manage", "reservations.manage", "admin" ] } ] }, "delete": { "tags": [ "Group" ], "summary": "Delete a certain group booking", "description": "Use this call to delete a group booking. This is only possible as long as no blocks exist that are linked to\r\nthis group booking
You must have at least one of these scopes: 'groups.manage, reservations.manage'.", "operationId": "BookingGroupsByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the group booking to be deleted.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the group was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "groups.manage", "reservations.manage", "admin" ] } ] }, "head": { "tags": [ "Group" ], "summary": "Check if a certain group booking exists", "description": "Check if a group booking exists by id
You must have at least one of these scopes: 'groups.read, reservations.read, reservations.manage'.", "operationId": "BookingGroupsByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "Id of the group booking to be checked for existence.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The group booking exists." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "groups.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/groups/$count": { "get": { "tags": [ "Group" ], "summary": "Returns number of group bookings", "description": "Returns number of group bookings matching the filter criteria
You must have at least one of these scopes: 'groups.read, reservations.read, reservations.manage'.", "operationId": "BookingGroups$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "textSearch", "description": "This will filter all group bookings for the provided free text. Currently it only looks up if either the group name, lastname,\r\nfirstname, email or company name of the booker contains one of the provided values", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Filter result by requested properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "from", "description": "The start of the time range. All groups that have blocks overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time range. All groups that have blocks overlapping with the interval specified by from and to\r\nwill be returned
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" } ], "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." }, "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": [ "groups.read", "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/groups/{id}/reservations": { "post": { "tags": [ "Group" ], "summary": "Add one or multiple reservations to an existing group booking using blocked inventory.", "description": "Creates new reservations and adds them to an existing group booking taking a list of reservations as input
You must have at least one of these scopes: 'groups.manage, reservations.manage'.", "operationId": "BookingGroupsByIdReservationsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the group booking the reservations should be attached to.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The list of reservations you want to create.", "required": true, "schema": { "$ref": "#/definitions/PickUpReservationsModel" } } ], "responses": { "201": { "description": "All new reservations were created and added to the group booking.", "schema": { "$ref": "#/definitions/ReservationsCreatedModel" }, "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." }, "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": [ "groups.manage", "reservations.manage", "admin" ] } ] } }, "/booking/v1/offers": { "get": { "tags": [ "Offer" ], "summary": "Returns offers for one specific stay.", "description": "Calculates and returns available offers for a specific property, arrival and departure date.
You must have at least one of these scopes: 'offers.read, reservations.manage'.", "operationId": "BookingOffersGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The property ID", "required": true, "type": "string" }, { "in": "query", "name": "arrival", "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "departure", "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template used to filter the rate plans, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "Time slice definition IDs, used to filter rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "Unit group IDs, used to filter rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "Unit group types, used to filter rate plans", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "channelCode", "description": "Channel code, used to filter the rate plans", "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "promoCode", "description": "The promo code associated with a certain special offer", "type": "string" }, { "in": "query", "name": "corporateCode", "description": "The code associated with a corporate rate", "type": "string" }, { "in": "query", "name": "adults", "description": "The number of adults you want offers for", "required": true, "type": "integer", "format": "int32" }, { "in": "query", "name": "childrenAges", "description": "The ages of the children you want offers for", "type": "array", "items": { "format": "int32", "type": "integer" } }, { "in": "query", "name": "includeUnavailable", "description": "Return also offers that are currently not publicly bookable as restrictions are violated. By default only available offers are returned", "type": "boolean" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/StayOffersModel" } }, "204": { "description": "There are no available offers for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offers.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/rate-plan-offers": { "get": { "tags": [ "Offer" ], "summary": "Returns offers for a specific rate plan.", "description": "Calculates and returns available offers for a specific rate plan, arrival and departure date.
You must have at least one of these scopes: 'offers.read, reservations.manage'.", "operationId": "BookingRate-plan-offersGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "ratePlanId", "description": "The rate plan ID", "required": true, "type": "string" }, { "in": "query", "name": "arrival", "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "departure", "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "channelCode", "description": "The channel code", "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "adults", "description": "The number of adults you want offers for", "required": true, "type": "integer", "format": "int32" }, { "in": "query", "name": "childrenAges", "description": "The ages of the children you want offers for", "type": "array", "items": { "format": "int32", "type": "integer" } }, { "in": "query", "name": "includeUnavailable", "description": "Return also offers that are currently not publicly bookable as restrictions are violated. By default only available offers are returned", "type": "boolean" }, { "in": "query", "name": "overridePrices", "description": "Desired prices for each timeslice", "type": "array", "items": { "format": "double", "type": "number" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/StayOffersModel" } }, "204": { "description": "There are no available offers for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offers.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/service-offers": { "get": { "tags": [ "Offer" ], "summary": "Returns service offers for one specific stay.", "description": "
You must have at least one of these scopes: 'offers.read, reservations.manage'.", "operationId": "BookingService-offersGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "ratePlanId", "description": "The rate plan ID", "required": true, "type": "string" }, { "in": "query", "name": "arrival", "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "departure", "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "channelCode", "description": "The channel code used to filter the services", "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "adults", "description": "The number of adults you want offers for", "required": true, "type": "integer", "format": "int32" }, { "in": "query", "name": "childrenAges", "description": "The ages of the children you want offers for", "type": "array", "items": { "format": "int32", "type": "integer" } }, { "in": "query", "name": "onlyDefaultDates", "description": "Depending on the postNextDay setting of a service it will be posted before or after midnight.\r\nBreakfast is usually delivered on the next morning, having 'postNextDay' set to true. Its 'default dates' are from the day after\r\narrival until the departure day. For services like dinner 'postNextDay' is false, and default dates are day of arrival until one\r\nday before departure.\r\nWith this query parameter set to 'false', you can also ask for dates outside of those default dates. It defaults to true.", "type": "boolean" }, { "in": "query", "name": "includeUnavailable", "description": "Return also offers that are currently not publicly bookable as restrictions are violated. By default only available offers are returned", "type": "boolean" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/ServiceOffersModel" } }, "204": { "description": "There are no available offers for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offers.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/offer-index": { "get": { "tags": [ "Offer" ], "summary": "Returns offers with rates and availabilities for the specified range.", "description": "Calculates and returns offers per time slice for a specific rate plan, arrival and departure date.
You must have at least one of these scopes: 'offer-index.read, offers.read'.", "operationId": "BookingOffer-indexGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "ratePlanId", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "to", "description": "
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string" }, { "in": "query", "name": "channelCode", "required": true, "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/TimeSliceListModel" } }, "204": { "description": "There are no rates for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offer-index.read", "offers.read", "admin" ] } ] } }, "/booking/v1/reservations": { "get": { "tags": [ "Reservation" ], "summary": "Returns a list of all reservations, filtered by the specified parameters.", "description": "Returns a list of all reservations, filtered by the specified parameters. If no parameters are set, returns the entire list.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingReservationsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "bookingId", "description": "Filter result by booking id", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Filter result by requested properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "ratePlanIds", "description": "Filter result by requested rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "companyIds", "description": "Filter result by requested companies", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitIds", "description": "Filter result by assigned units", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "Filter result by requested unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "Filter result by requested unit group types", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "blockIds", "description": "Filter result by requested blocks", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "status", "description": "Filter result by reservation status", "type": "array", "items": { "enum": [ "Confirmed", "InHouse", "CheckedOut", "Canceled", "NoShow" ], "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by date and time attributes of reservation. Use in combination with the 'To' and 'From' attributes.\r\nAll filters will check if the date specified by the filter type is between from (included) and to (excluded).\r\nThe exception being filtering for 'stay', which will return all reservations that are overlapping with the interval specified by from and to.", "type": "string", "enum": [ "Arrival", "Departure", "Stay", "Creation", "Modification", "Cancellation" ] }, { "in": "query", "name": "from", "description": "The start of the time interval. When filtering by date, at least one of 'from' and 'to' has to be specified
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time interval, must be larger than 'from'. When filtering by date, at least one of 'from' and 'to' has to be specified
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "channelCode", "description": "Filter result by the channel code", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "sources", "description": "Filter result by source", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "validationMessageCategory", "description": "Filter result by validation message category", "type": "array", "items": { "enum": [ "OfferNotAvailable", "AutoUnitAssignment" ], "type": "string" } }, { "in": "query", "name": "externalCode", "description": "Filter result by the external code. The result set will contain all reservations that have an external code starting with the\r\nprovided value", "type": "string" }, { "in": "query", "name": "textSearch", "description": "This will filter all reservations where the provided text is contained in: booker first name or last name or email or company name,\r\nprimary guest first name or last name or email or company name, external code, reservation id, unit name. The search is case insensitive.", "type": "string" }, { "in": "query", "name": "balanceFilter", "description": "This will filter reservations based on their balance.
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "allFoliosHaveInvoice", "description": "If set to {true}, returns only reservations, in which all folios are closed and have an invoice.\r\nIf set to {false}, returns only reservations, in which some of the folios are open or don't have an invoice", "type": "boolean" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "sort", "description": "List of all fields that can be used to sort the results. Possible values are: arrival:asc, arrival:desc, departure:asc, departure:desc, created:asc, created:desc, updated:asc, updated:desc, id:asc, id:desc, firstname:asc, firstname:desc, lastname:asc, lastname:desc, unitname:asc, unitname:desc. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "arrival:asc", "arrival:desc", "departure:asc", "departure:desc", "created:asc", "created:desc", "updated:asc", "updated:desc", "id:asc", "id:desc", "firstname:asc", "firstname:desc", "lastname:asc", "lastname:desc", "unitname:asc", "unitname:desc" ], "type": "string" } }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: booker, actions, timeSlices, services, assignedUnits, company. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "booker", "actions", "timeSlices", "services", "assignedUnits", "company" ], "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/ReservationListModel" } }, "204": { "description": "No reservations found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservations/$count": { "get": { "tags": [ "Reservation" ], "summary": "Returns the number of reservations fulfilling the criteria specified in the parameters.", "description": "If no parameters are set, returns the total count of reservations.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingReservations$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "bookingId", "description": "Filter result by booking id", "type": "string" }, { "in": "query", "name": "propertyIds", "description": "Filter result by requested properties", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "ratePlanIds", "description": "Filter result by requested rate plans", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "companyIds", "description": "Filter result by requested companies", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitIds", "description": "Filter result by assigned units", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "Filter result by requested unit groups", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "Filter result by requested unit group types", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "blockIds", "description": "Filter result by requested blocks", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "status", "description": "Filter result by reservation status", "type": "array", "items": { "enum": [ "Confirmed", "InHouse", "CheckedOut", "Canceled", "NoShow" ], "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by date and time attributes of reservation. Use in combination with the 'To' and 'From' attributes.\r\nAll filters will check if the date specified by the filter type is between from (included) and to (excluded).\r\nThe exception being filtering for 'stay', which will return all reservations that are overlapping with the interval specified by from and to.", "type": "string", "enum": [ "Arrival", "Departure", "Stay", "Creation", "Modification", "Cancellation" ] }, { "in": "query", "name": "from", "description": "The start of the time interval. When filtering by date, at least one of 'from' and 'to' has to be specified
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The end of the time interval, must be larger than 'from'. When filtering by date, at least one of 'from' and 'to' has to be specified
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "channelCode", "description": "Filter result by the channel code", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "sources", "description": "Filter result by source", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "validationMessageCategory", "description": "Filter result by validation message category", "type": "array", "items": { "enum": [ "OfferNotAvailable", "AutoUnitAssignment" ], "type": "string" } }, { "in": "query", "name": "externalCode", "description": "Filter result by the external code. The result set will contain all reservations that have an external code starting with the\r\nprovided value", "type": "string" }, { "in": "query", "name": "textSearch", "description": "This will filter all reservations where the provided text is contained in: booker first name or last name or email or company name,\r\nprimary guest first name or last name or email or company name, external code, reservation id, unit name. The search is case insensitive.", "type": "string" }, { "in": "query", "name": "balanceFilter", "description": "This will filter reservations based on their balance.
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "allFoliosHaveInvoice", "description": "If set to {true}, returns only reservations, in which all folios are closed and have an invoice.\r\nIf set to {false}, returns only reservations, in which some of the folios are open or don't have an invoice", "type": "boolean" } ], "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." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservations/{id}": { "get": { "tags": [ "Reservation" ], "summary": "Returns a specific reservation.", "description": "Retrieves a reservation, specified by its ID.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingReservationsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation to be retrieved.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: timeSlices, services, booker, actions, company, assignedUnits. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "timeSlices", "services", "booker", "actions", "company", "assignedUnits" ], "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/ReservationModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] }, "patch": { "tags": [ "Reservation" ], "summary": "Allows to modify certain reservation properties", "description": "Here is the list of operations that are currently allowed:\r\n- Add, replace and remove Comment\r\n- Add, replace and remove GuestComment\r\n- Add, replace and remove PaymentAccount\r\n- Add, replace and remove TravelPurpose\r\n- Add, replace and remove AdditionalGuests\r\n- Add a company (using company/Id, and only if not already set)\r\n- Add, replace and remove Commission\r\n- Replace PrimaryGuest\r\n- Remove ValidationMessages
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservationsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation 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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservations/{id}/offers": { "get": { "tags": [ "Reservation" ], "summary": "Returns offers for one specific reservation.", "description": "Calculates and returns offers for amending a specific reservation.
You must have at least one of these scopes: 'offers.read, reservations.manage'.", "operationId": "BookingReservationsByIdOffersGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation to be amended.", "required": true, "type": "string" }, { "in": "query", "name": "arrival", "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, { "in": "query", "name": "departure", "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, { "in": "query", "name": "adults", "description": "Number of adults", "type": "integer", "format": "int32" }, { "in": "query", "name": "childrenAges", "description": "Ages of children", "type": "array", "items": { "format": "int32", "type": "integer" } }, { "in": "query", "name": "channelCode", "description": "The channel code used to filter the rate plans", "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "promoCode", "description": "The promo code associated with a certain special offer, like corporate rate", "type": "string" }, { "in": "query", "name": "requote", "description": "Whether the offers should be re-quoted based on current prices, or only additions like change of number of adults should be calculated.\r\nDefaults to 'false'", "type": "boolean" }, { "in": "query", "name": "includeUnavailable", "description": "Return also offers that are currently not publicly bookable as restrictions are violated. By default only available offers are returned", "type": "boolean" }, { "in": "query", "name": "unitGroupIds", "description": "The list of unit groups used to filter the offers.", "type": "array", "items": { "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/ReservationStayOffersModel" } }, "204": { "description": "There are no available offers for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offers.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservations/{id}/service-offers": { "get": { "tags": [ "Reservation" ], "summary": "Returns service offers for one specific reservation.", "description": "Calculates and returns service offers for a specific reservation.
You must have at least one of these scopes: 'offers.read, reservations.manage'.", "operationId": "BookingReservationsByIdService-offersGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" }, { "in": "query", "name": "channelCode", "description": "The channel code used to filter the services", "type": "string", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ] }, { "in": "query", "name": "onlyDefaultDates", "description": "Depending on the postNextDay setting of a service it will by default be posted before or after midnight.\r\nBreakfast is usually delivered on the next morning, so all the dates from the day after arrival to the departure day\r\nare default dates and will have this flag set to true. For services like a dinner it is the other way around.\r\nWith this query parameter, you can also ask for the dates, that usually the service will not be booked. It defaults to true.", "type": "boolean" }, { "in": "query", "name": "includeUnavailable", "description": "Return also offers that are currently not publicly bookable as restrictions are violated. By default only available offers are returned", "type": "boolean" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/ServiceOffersModel" } }, "204": { "description": "There are no available offers for the specified parameters." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "offers.read", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservations/{id}/services": { "get": { "tags": [ "Reservation" ], "summary": "Returns the services booked for a specific reservation.", "description": "Returns the services booked for a specific reservation.
You must have at least one of these scopes: 'reservations.read, reservations.manage'.", "operationId": "BookingReservationsByIdServicesGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/ReservationServiceListModel" } }, "204": { "description": "There are no booked services for the specified reservation." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.read", "reservations.manage", "admin" ] } ] }, "delete": { "tags": [ "Reservation" ], "summary": "Removes a service from a reservation.", "description": "Removes a service from a reservation. The service will not be removed if it is mandatory, already posted or if the service date is in the past.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservationsByIdServicesDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" }, { "in": "query", "name": "serviceId", "description": "The id of the service 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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/assign-unit": { "put": { "tags": [ "ReservationActions" ], "summary": "Assign a unit to a reservation.", "description": "Assigns one of the available units to a reservation which is in state 'Confirmed' or 'InHouse'.
You must have at least one of these scopes: 'reservations.assign-unit, reservations.manage'.", "operationId": "BookingReservation-actionsByIdAssign-unitPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation a unit should be assigned to.", "required": true, "type": "string" }, { "in": "query", "name": "unitConditions", "description": "The optional unit conditions for unit that you want to auto assign for.", "type": "array", "items": { "enum": [ "Clean", "CleanToBeInspected", "Dirty" ], "type": "string" } } ], "responses": { "200": { "description": "Unit assignment was successful.", "schema": { "$ref": "#/definitions/AutoAssignedUnitListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.assign-unit", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/assign-unit/{unitId}": { "put": { "tags": [ "ReservationActions" ], "summary": "Assign a specific unit to a reservation.", "description": "Assigns a specific unit to a reservation which is in state 'Confirmed' or 'InHouse'.
If the unit is not available, the call will return an error, and no unit will be assigned.
You must have at least one of these scopes: 'reservations.assign-unit, reservations.manage'.", "operationId": "BookingReservation-actionsByIdAssign-unitByUnitIdPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation the unit should be assigned to.", "required": true, "type": "string" }, { "in": "path", "name": "unitId", "description": "The id of the unit to be assigned.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The start date and optional time for the unit assignment. If not specified, the reservation's arrival will be used.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, { "in": "query", "name": "to", "description": "The end date and optional time for the unit assignment. If not specified, the reservation's departure will be used.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" } ], "responses": { "200": { "description": "Unit assignment was successful.", "schema": { "$ref": "#/definitions/AssignedUnitModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.assign-unit", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/unassign-units": { "put": { "tags": [ "ReservationActions" ], "summary": "Unassign units from a reservation.", "description": "Unassigns units for all time slices of the given reservation. If no units are assigned for the\r\nreservation nothing will happen. It will fail for reservations in status 'CheckedOut'.
You must have at least one of these scopes: 'reservations.assign-unit, reservations.manage'.", "operationId": "BookingReservation-actionsByIdUnassign-unitsPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation the unit should be unassigned for.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Unassigning the unit was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.assign-unit", "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/checkin": { "put": { "tags": [ "ReservationActions" ], "summary": "Check-in of a reservation.", "description": "Check in a specific reservation which is in status 'Confirmed', and has a unit assigned. This changes the status to 'InHouse', and sets the check-in date and time.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdCheckinPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be processed.", "required": true, "type": "string" }, { "in": "query", "name": "withCityTax", "description": "Define if city tax should be added for this reservation or not. The default is \"true\".", "type": "boolean" } ], "responses": { "204": { "description": "Check-in of the reservation was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/checkout": { "put": { "tags": [ "ReservationActions" ], "summary": "Check-out of a reservation.", "description": "Check out a specific reservation which is in status 'InHouse'. This changes the status to 'CheckedOut', and sets the check-out date and time.\r\nAll open charges on the folio will be posted.\r\n
\r\nCheck-out is only possible, if the departure date is not later than tomorrow. Otherwise, first amend the reservation and shorten the stay.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdCheckoutPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Check-out of the reservation was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/cancel": { "put": { "tags": [ "ReservationActions" ], "summary": "Cancel a reservation.", "description": "Cancel a specific reservation which is in status 'Confirmed' and where the arrival time is in the future.\r\nThis changes the status to 'Canceled', and sets the cancellation date and time.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdCancelPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Cancellation of the reservation was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/noshow": { "put": { "tags": [ "ReservationActions" ], "summary": "Set a reservation to No-show.", "description": "Set a specific reservation to No-show which is in status 'Confirmed' and where the arrival date is in the past.\r\nThis changes the status to 'NoShow', and sets the no-show date and time.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdNoshowPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be processed.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Setting the reservation to No-show was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/amend": { "put": { "tags": [ "ReservationActions" ], "summary": "Allows you to amend the stay details of a reservation", "description": "Modifies the stay-related data of a reservation.
\r\nIf a reservation is 'Confirmed', you can change all fields.
\r\nIf a reservation is 'InHouse', only changes to future time slices are possible.
\r\nChanges to reservations that are in the status 'CheckedOut' or 'Canceled' are not possible at all.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdAmendPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be modified", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "The new stay details that should be applied to the reservation.", "required": true, "schema": { "$ref": "#/definitions/DesiredStayDetailsModel" } } ], "responses": { "204": { "description": "The reservation has been changed." }, "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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/amend/$force": { "put": { "tags": [ "ReservationActions" ], "summary": "Allows you to amend the stay details of a reservation regardless of availability or restrictions.", "description": "Modifies the stay-related data of a reservation.
\r\nIf a reservation is 'Confirmed', you can change all fields.
\r\nIf a reservation is 'InHouse', only changes to future time slices are possible.
\r\nChanges to reservations that are in the status 'CheckedOut' or 'Canceled' are not possible at all.
You must have this scope: 'reservations.force-manage'.", "operationId": "BookingReservation-actionsByIdAmend$forcePut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation that should be modified", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "The new stay details that should be applied to the reservation.", "required": true, "schema": { "$ref": "#/definitions/DesiredStayDetailsModel" } } ], "responses": { "204": { "description": "The reservation has been changed." }, "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." }, "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": [ "reservations.force-manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/book-service": { "put": { "tags": [ "ReservationActions" ], "summary": "Book the service for a specific reservation.", "description": "Use this to book a service for a specific reservation.\r\nPlease note that when dates are specified, all desired dates must be specified or they will be removed if not posted to the folio.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdBook-servicePut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "", "required": true, "schema": { "$ref": "#/definitions/BookReservationServiceModel" } } ], "responses": { "204": { "description": "Booking of the service for the reservation 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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/book-service/$force": { "put": { "tags": [ "ReservationActions" ], "summary": "Book the service for a specific reservation regardless of availability.", "description": "Use this to book a service for a specific reservation.\r\nPlease note that when dates are specified, all desired dates must be specified or they will be removed if not posted to the folio.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdBook-service$forcePut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "", "required": true, "schema": { "$ref": "#/definitions/BookReservationServiceModel" } } ], "responses": { "204": { "description": "Booking of the service for the reservation 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." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/remove-city-tax": { "put": { "tags": [ "ReservationActions" ], "summary": "Removes the city tax from a reservation.", "description": "Use this is you want to remove the city tax from a reservation before the stay.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdRemove-city-taxPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Removal of the city tax for the reservation was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/reservation-actions/{id}/add-city-tax": { "put": { "tags": [ "ReservationActions" ], "summary": "Adds the city tax to a reservation.", "description": "Use this if you want to add the city tax to a reservation.
You must have this scope: 'reservations.manage'.", "operationId": "BookingReservation-actionsByIdAdd-city-taxPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the reservation.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Addition of the city tax for the reservation was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reservations.manage", "admin" ] } ] } }, "/booking/v1/types/sources": { "get": { "tags": [ "Types" ], "summary": "Returns a list of supported sources.", "description": "Returns a list of channels that could be used as a source to create bookings.", "operationId": "BookingTypesSourcesGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/SourceListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" } } } } }, "/finance/v1/folios": { "get": { "tags": [ "Folio" ], "summary": "Returns a list of all folios.", "description": "Allowed actions are only returned, when the list is filtered by reservation ID.
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyIds", "description": "Filter folio list by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "companyIds", "description": "Filter folio list by company IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "reservationIds", "description": "Filter folio list by reservation IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "bookingIds", "description": "Filter folio list by booking IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "isEmpty", "description": "If set to {true}, only return empty folios (no unmoved [transitory] charges, no unmoved payments, no allowances).\r\nIf set to {false}, only return non-empty folios", "type": "boolean" }, { "in": "query", "name": "checkedOutOnAccountsReceivable", "description": "If set to {true}, only return folios that have been checked out on accounts receivables\r\nOtherwise, returns all.", "type": "boolean" }, { "in": "query", "name": "excludeClosed", "description": "If set to {true}, closed folios are filtered out from the result collection", "type": "boolean" }, { "in": "query", "name": "hasInvoices", "description": "If set to {true}, only return folios that been invoices", "type": "boolean" }, { "in": "query", "name": "createdFrom", "description": "The inclusive start time of the date of creation. Mostly useful for external folios
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "createdTo", "description": "The exclusive end time of the date of creation. Mostly useful for external folios
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "onlyMain", "description": "If set to {true}, only main folios are returned, otherwise all.", "type": "boolean" }, { "in": "query", "name": "type", "description": "The type of the folio", "type": "string", "enum": [ "House", "Guest", "External" ] }, { "in": "query", "name": "externalFolioCode", "description": "Allows filtering external folios by code.\r\nUseful when you use external folios with custom codes.\r\nSpecifying this parameter will ignore the Type parameter and treat as if it would be set to \"External\" instead.", "type": "string" }, { "in": "query", "name": "textSearch", "description": "This will filter all folios where the provided text is contained in: debitor first name or last name or email or company name,\r\nfolio id. The search is case insensitive.", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: charges, allowances, transitoryCharges, payments, allowedActions, company, warnings. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "charges", "allowances", "transitoryCharges", "payments", "allowedActions", "company", "warnings" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FolioListModel" } }, "204": { "description": "No folios found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] }, "post": { "tags": [ "Folio" ], "summary": "Create additional folios for a reservation, or new external folios", "description": "Use this call to create a new folio.
You must have at least one of these scopes: 'reservations.create, reservations.manage, folios.manage'.", "operationId": "FinanceFoliosPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the folio.", "required": true, "schema": { "$ref": "#/definitions/CreateFolioModel" } } ], "responses": { "201": { "description": "Success", "schema": { "$ref": "#/definitions/FolioCreatedModel" }, "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." }, "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": [ "reservations.create", "reservations.manage", "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/$count": { "get": { "tags": [ "Folio" ], "summary": "Returns number of folios.", "description": "Returns number of folios matching the filter criteria.
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFolios$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyIds", "description": "Filter folio list by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "companyIds", "description": "Filter folio list by company IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "reservationIds", "description": "Filter folio list by reservation IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "bookingIds", "description": "Filter folio list by booking IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "isEmpty", "description": "If set to {true}, only return empty folios (no unmoved [transitory] charges, no unmoved payments, no allowances).\r\nIf set to {false}, only return non-empty folios", "type": "boolean" }, { "in": "query", "name": "checkedOutOnAccountsReceivable", "description": "If set to {true}, only return folios that have been checked out on accounts receivables\r\nOtherwise, returns all.", "type": "boolean" }, { "in": "query", "name": "excludeClosed", "description": "If set to {true}, closed folios are filtered out from the result collection", "type": "boolean" }, { "in": "query", "name": "hasInvoices", "description": "If set to {true}, only return folios that been invoices", "type": "boolean" }, { "in": "query", "name": "createdFrom", "description": "The inclusive start time of the date of creation. Mostly useful for external folios
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "createdTo", "description": "The exclusive end time of the date of creation. Mostly useful for external folios
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "onlyMain", "description": "If set to {true}, only main folios are returned, otherwise all.", "type": "boolean" }, { "in": "query", "name": "type", "description": "The type of the folio", "type": "string", "enum": [ "House", "Guest", "External" ] }, { "in": "query", "name": "externalFolioCode", "description": "Allows filtering external folios by code.\r\nUseful when you use external folios with custom codes.\r\nSpecifying this parameter will ignore the Type parameter and treat as if it would be set to \"External\" instead.", "type": "string" }, { "in": "query", "name": "textSearch", "description": "This will filter all folios where the provided text is contained in: debitor first name or last name or email or company name,\r\nfolio id. The search is case insensitive.", "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." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{id}": { "get": { "tags": [ "Folio" ], "summary": "Returns one folio.", "description": "Get a folio by ID.
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the folio.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: folios. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "folios" ], "type": "string" } } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/FolioModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] }, "patch": { "tags": [ "Folio" ], "summary": "Allows to modify certain properties of a folio", "description": "Here is the list of operations that are currently allowed:\r\n- Replace debitor (for guest folios only)\r\n- Add a company (not for house folios)\r\n- Replace/remove a company (not for house folios)
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The folio ID.", "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/.\r\n See the FolioDebitorModel in GET for values that can be changed.", "required": true, "schema": { "type": "array", "items": { "$ref": "#/definitions/Operation" } } } ], "responses": { "204": { "description": "The folio 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." }, "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": [ "folios.manage", "admin" ] } ] }, "head": { "tags": [ "Folio" ], "summary": "Check if the folio exists.", "description": "Check if the folio exists.
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "", "required": true, "type": "string" } ], "responses": { "200": { "description": "The folio exists." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "folios.read", "folios.manage", "admin" ] } ] }, "delete": { "tags": [ "Folio" ], "summary": "Deletes a folio.", "description": "Deletes a folio. This cannot be undone.\r\nYou can delete a folio only if it's not a main folio,\r\nand the folio is empty (it has no charges, allowance, payments or pending payments).\r\n
\r\nRequires 'allowed action': Delete.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The folio ID.", "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/charges": { "post": { "tags": [ "FolioActions" ], "summary": "Adds and directly posts a charge to the folio.\r\nIf there are any fees configured for the property, an additional charge for each configured fee will be added.", "description": "Adds a charge for any good or service, and directly posts it. Can be used to charge items that are not part of the reservation,\r\nbut should appear on the invoice.\r\n
\r\nRequires 'allowed action': AddCharge.
You must have at least one of these scopes: 'charges.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdChargesPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The charge to be added", "required": true, "schema": { "$ref": "#/definitions/CreateChargeModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AddedChargeModel" } }, "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." }, "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": [ "charges.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/transitory-charges": { "post": { "tags": [ "FolioActions" ], "summary": "Adds and directly posts a transitory charge to the folio.\r\nIf there are any fees configured for the property, an additional charge for each configured fee will be added.", "description": "Adds a transitory item for any good or service, and directly posts it. To be used for sales that are not revenue of the property,\r\nbut should appear on te guest's invoice.\r\n
\r\nRequires 'allowed action': AddCharge.
You must have at least one of these scopes: 'charges.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdTransitory-chargesPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The transitory charge to be added", "required": true, "schema": { "$ref": "#/definitions/CreateTransitoryChargeModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CreatedSubResourceIdModel" } }, "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." }, "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": [ "charges.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/cancellation-fee": { "post": { "tags": [ "FolioActions" ], "summary": "Adds and directly posts a cancellation fee to the folio.\r\nIf there are any fees configured for the property, an additional charge for each configured fee will be added.", "description": "Adds a cancellation fee, and directly posts it. Cancellation fees can only be posted on guest folios.\r\n
\r\nRequires 'allowed action': AddCancellationFee.
You must have at least one of these scopes: 'charges.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdCancellation-feePost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The cancellation fee to be added", "required": true, "schema": { "$ref": "#/definitions/MonetaryValueModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AddedChargeModel" } }, "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." }, "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": [ "charges.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/no-show-fee": { "post": { "tags": [ "FolioActions" ], "summary": "Adds and directly posts a no-show fee to the folio.\r\nIf there are any fees configured for the property, an additional charge for each configured fee will be added.", "description": "Adds a no-show fee, and directly posts it. No-show fees can only be posted on guest folios.\r\n
\r\nRequires 'allowed action': AddNoShowFee.
You must have at least one of these scopes: 'charges.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdNo-show-feePost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The no-show fee to be added", "required": true, "schema": { "$ref": "#/definitions/MonetaryValueModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AddedChargeModel" } }, "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." }, "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": [ "charges.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/close": { "put": { "tags": [ "FolioActions" ], "summary": "Closes a folio.", "description": "Mark a folio as closed to prevent adding charges and payments. This action cannot be undone,\r\nand is only possible if the balance is 0.\r\n
\r\nRequires 'allowed action': Close.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdClosePut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID.", "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/reopen": { "put": { "tags": [ "FolioActions" ], "summary": "Reopens a folio.", "description": "Reopens a closed folio.\r\nYou can only reopen a folio if no invoice has been created for the folio.\r\nOtherwise, use `invoice-actions/{invoiceId}/cancel` endpoint to cancel an invoice and reopen the folio.\r\n
\r\nRequires 'allowed action': Reopen.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdReopenPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The folio ID.", "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/move-charges": { "put": { "tags": [ "FolioActions" ], "summary": "Move multiple charges, allowances and transitory charges from one folio to another.", "description": "If one of the folios is closed, this action cannot be performed.

\r\nIf any of the specified charges does not exist, this action cannot be performed.

\r\nMoving negative charges to a house folio is not supported. Create additional folios instead, and move the charges there.
You must have at least one of these scopes: 'charges.move, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdMove-chargesPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the source folio from where the charges should be moved away.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "See class.", "required": true, "schema": { "$ref": "#/definitions/MoveChargesRequest" } } ], "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." }, "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": [ "charges.move", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/bulk-move": { "put": { "tags": [ "FolioActions" ], "summary": "Move multiple charges from one folio to another. Multiple source folios and multiple target folios can be specified.", "description": "If one of the folios is closed, this action cannot be performed.

\r\nIf any of the specified charges does not exist, this action cannot be performed.

\r\nMoving negative charges to a house folio is not supported. Create additional folios instead, and move the charges there.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFolio-actionsBulk-movePut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "body", "description": "See class.", "required": true, "schema": { "$ref": "#/definitions/BulkMoveRequest" } } ], "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/move-all-charges": { "put": { "tags": [ "FolioActions" ], "summary": "Move all charges and transitory charges from one folio to another.", "description": "If one of the folios is closed, this action cannot be performed.

\r\nOnly charges that can be moved will be moved.


You must have at least one of these scopes: 'charges.move, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdMove-all-chargesPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the source folio from where the charges should be moved away.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "See class.", "required": true, "schema": { "$ref": "#/definitions/MoveAllChargesRequest" } } ], "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." }, "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": [ "charges.move", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/charges/{chargeId}/allowances": { "post": { "tags": [ "FolioActions" ], "summary": "Posts an allowance for a charge", "description": "Allowance value posted must not exceed source charge minus allowances posted for this charge
You must have at least one of these scopes: 'allowances.post, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdChargesByChargeIdAllowancesPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio.", "required": true, "type": "string" }, { "in": "path", "name": "chargeId", "description": "The ID of the charge allowance posted for", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "Allowance data", "required": true, "schema": { "$ref": "#/definitions/CreateAllowanceForChargeModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CreatedSubResourceIdModel" } }, "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." }, "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": [ "allowances.post", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/allowances": { "post": { "tags": [ "FolioActions" ], "summary": "Posts an allowance for a folio", "description": "Allowance value posted must not exceed sum of charges minus existing allowances
You must have at least one of these scopes: 'allowances.post, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdAllowancesPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "Allowance amount and post reason", "required": true, "schema": { "$ref": "#/definitions/CreateAllowanceForFolioModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CreatedSubResourceIdModel" } }, "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." }, "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": [ "allowances.post", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/bulk-allowances": { "post": { "tags": [ "FolioActions" ], "summary": "Posts allowances for a folio", "description": "Allowance value posted must not exceed sum of charges minus existing allowances
You must have at least one of these scopes: 'allowances.post, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdBulk-allowancesPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "Allowance amount and post reason", "required": true, "schema": { "$ref": "#/definitions/CreateAllowanceBulkModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/BulkAllowanceCreatedModel" } }, "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." }, "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": [ "allowances.post", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/post-charges": { "put": { "tags": [ "FolioActions" ], "summary": "Posts all unposted charges for the whole length of stay.", "description": "Use this call for cases when the folio should be closed early. For example, when a guest wants to get the invoice right after the check-in\r\nAs posting charges before the service is delivered is potentially risky, this operation will fail if there are any unposted charges\r\nfurther in the future than 7 days.\r\nPosting open charges is only possible for fully prepaid folios.\r\n
\r\nRequires 'allowed action': PostOpenCharges.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdPost-chargesPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio.", "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/move-payments": { "put": { "tags": [ "FolioActions" ], "summary": "Move multiple payments from one folio of a reservation to another.", "description": "Move payments from one folio of a reservation to another - moving between different reservations is not supported,\r\nand will lead to an error. If one of the folios is closed, this action cannot be performed.
\r\nThe PSP reference, if present, will be removed when moving and only be persisted on the original payment.
You must have at least one of these scopes: 'charges.move, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdMove-paymentsPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the source folio from where the payments should be moved away.", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "See class.", "required": true, "schema": { "$ref": "#/definitions/MovePaymentsRequest" } } ], "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." }, "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": [ "charges.move", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/correct": { "post": { "tags": [ "FolioActions" ], "summary": "Corrects a folio by moving some charges.\r\nThis operation creates a new folio with the charges from the request.\r\nThe payment, equal to the sum of charges, is also split to this new folio so that both folios will have 0 balance.", "description": "Allowance value posted must not exceed sum of charges minus existing allowances
You must have this scope: 'folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdCorrectPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "Array of chargeIds to move and reason", "required": true, "schema": { "$ref": "#/definitions/CorrectFolioRequest" } } ], "responses": { "201": { "description": "Folio correction was successful. Correction folio created.", "schema": { "$ref": "#/definitions/FolioCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/charges/{chargeId}/split": { "post": { "tags": [ "FolioActions" ], "summary": "Splits a charge into two using the percent or amount provided\r\nCreates an allowance and two new charges.", "description": "
You must have at least one of these scopes: 'allowances.post, charges.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdChargesByChargeIdSplitPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio", "required": true, "type": "string" }, { "in": "path", "name": "chargeId", "description": "The ID of the charge", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "See class", "required": true, "schema": { "$ref": "#/definitions/SplitChargeRequest" } } ], "responses": { "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." }, "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": [ "allowances.post", "charges.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folio-actions/{folioId}/payments/{paymentId}/split": { "post": { "tags": [ "FolioActions" ], "summary": "Splits a payment into two using the percent or amount provided\r\nCreates a refund and two new payments.", "description": "
You must have at least one of these scopes: 'payments.create, refunds.create, folios.manage'.", "operationId": "FinanceFolio-actionsByFolioIdPaymentsByPaymentIdSplitPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "The ID of the folio", "required": true, "type": "string" }, { "in": "path", "name": "paymentId", "description": "The ID of the payment", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "See class", "required": true, "schema": { "$ref": "#/definitions/SplitPaymentRequest" } } ], "responses": { "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." }, "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": [ "payments.create", "refunds.create", "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments": { "get": { "tags": [ "FolioPayments" ], "summary": "Get a list of payments.", "description": "Returns a list of all payments for this folio ordered by creation date, newest first
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "query", "name": "statusCodes", "description": "Filter payments by one or more status.", "type": "array", "items": { "enum": [ "Pending", "Success", "Failure", "Canceled" ], "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/PaymentListModel" } }, "204": { "description": "No payments could be found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] }, "post": { "tags": [ "FolioPayments" ], "summary": "Trigger a custom payment for the folio.", "description": "A custom payment will not involve any automatic processing. This is best to be used for cash, cheque or voucher payments or payments that have\r\nbeen processed by an external system and it should just be recorded in apaleo for accounting purposes.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the payment.", "required": true, "schema": { "$ref": "#/definitions/CreateCustomPaymentRequest" } } ], "responses": { "201": { "description": "Payment was created and accounting was performed.", "schema": { "$ref": "#/definitions/PaymentCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/{paymentId}": { "get": { "tags": [ "FolioPayments" ], "summary": "Get a payment by ID.", "description": "Get a payment by its ID
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsByPaymentIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "path", "name": "paymentId", "description": "The payment ID.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FolioPaymentModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/by-terminal": { "post": { "tags": [ "FolioPayments" ], "summary": "Trigger a payment on a card terminal for the folio.", "description": "Trigger a terminal payment for the folio. The payment will be processed asynchronously. Use the location header to poll for the status of the payment.\r\nAs long as a payment is pending it reduces the amount of allowed payments for the folio. The payment times out after 60 minutes automatically
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsBy-terminalPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the payment.", "required": true, "schema": { "$ref": "#/definitions/CreateTerminalPaymentRequest" } } ], "responses": { "201": { "description": "Payment was created and will be processed via the specified terminal.", "schema": { "$ref": "#/definitions/PaymentCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/by-authorization": { "post": { "tags": [ "FolioPayments" ], "summary": "Captures a specific amount from a pre-authorization and posts it to the folio.", "description": "Captures a specific amount from a pre-authorization and posts it to the folio. For the pre-authorization please ensure to set the respective metadata in the original payment\r\ntransaction. The flow type has to be set to CaptureOnly. For more information please refer to the documentation of how to do a pre-authorization on a booking engine.\r\nThe payment will be processed asynchronously. Use the location header to poll for the status of the payment. As long as a payment is pending it reduces the amount of allowed\r\npayments for the folio. The payment times out after 60 minutes automatically
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsBy-authorizationPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the payment.", "required": true, "schema": { "$ref": "#/definitions/CreateAuthorizationPaymentRequest" } } ], "responses": { "201": { "description": "Payment was created and will be processed.", "schema": { "$ref": "#/definitions/PaymentCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/by-payment-account": { "post": { "tags": [ "FolioPayments" ], "summary": "Trigger a payment using the payment account stored on the reservation.", "description": "Trigger a payment for the folio using the payment account stored on the reservation. The payment will be processed asynchronously. Use the location header to poll\r\nfor the status of the payment. As long as a payment is pending it reduces the amount of allowed payments for the folio. The payment times out after 60 minutes\r\nautomatically
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsBy-payment-accountPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the payment.", "required": true, "schema": { "$ref": "#/definitions/CreateAccountPaymentRequest" } } ], "responses": { "201": { "description": "Payment was created and will be processed.", "schema": { "$ref": "#/definitions/PaymentCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/by-link": { "post": { "tags": [ "FolioPayments" ], "summary": "Creates a link to a payment form where guests can pay.", "description": "Creates a link to a payment form where guests can pay. To enable open invoice payment methods you need to provide at\r\nleast the paid charges with the request. For some open invoice payment methods you also need to ensure that the full\r\nbilling address of the folio is set, before you create the payment link. The payment will be processed asynchronously.\r\nUse the location header to poll for the status of the payment. As long as a payment is pending it reduces the amount\r\nof allowed payments for the folio.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsBy-linkPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the payment link.", "required": true, "schema": { "$ref": "#/definitions/CreatePaymentLinkRequest" } } ], "responses": { "201": { "description": "Payment was created and will be processed.", "schema": { "$ref": "#/definitions/PaymentCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/{paymentId}/cancel": { "put": { "tags": [ "FolioPayments" ], "summary": "Cancels a payment.", "description": "Sets a payment to cancelled and triggers the cancellation.
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsByPaymentIdCancelPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "path", "name": "paymentId", "description": "The id of the payment.", "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/refunds": { "get": { "tags": [ "FolioPayments" ], "summary": "Get a list of refunds.", "description": "Returns a list of all refunds for this folio ordered by creation date, newest first
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByFolioIdRefundsGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "query", "name": "statusCodes", "description": "Filter refunds by one or more status", "type": "array", "items": { "enum": [ "Pending", "Success", "Failure", "Canceled" ], "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/RefundListModel" } }, "204": { "description": "No refunds could be found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] }, "post": { "tags": [ "FolioPayments" ], "summary": "Trigger a refund for the folio.", "description": "Trigger a generic refund for the folio. The refund will be processed asynchronously. Use the location header to poll for the status of the refund.\r\nAs long as a refund is pending it reduces the amount of allowed refunds for the folio. The refund times out after 60 minutes automatically
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdRefundsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the refund.", "required": true, "schema": { "$ref": "#/definitions/CreateFolioRefundRequest" } } ], "responses": { "201": { "description": "Refund was created and will be processed.", "schema": { "$ref": "#/definitions/RefundCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/refunds/{refundId}": { "get": { "tags": [ "FolioPayments" ], "summary": "Get a refund by ID.", "description": "Get a refund by its ID
You must have at least one of these scopes: 'folios.read, folios.manage'.", "operationId": "FinanceFoliosByFolioIdRefundsByRefundIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "path", "name": "refundId", "description": "The refund ID.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/RefundModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "folios.read", "folios.manage", "admin" ] } ] } }, "/finance/v1/folios/{folioId}/payments/{paymentId}/refunds": { "post": { "tags": [ "FolioPayments" ], "summary": "Trigger a refund for a specific payment.", "description": "Trigger a refund for a specific payment on this folio. The refund will be processed asynchronously. Use the location header to poll for\r\nthe status of the refund. As long as a refund is pending the allowed refund amount for this payment will be reduced by the amount. The refund\r\ntimes out after 10 minutes automatically
You must have this scope: 'folios.manage'.", "operationId": "FinanceFoliosByFolioIdPaymentsByPaymentIdRefundsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "folioId", "description": "", "required": true, "type": "string" }, { "in": "path", "name": "paymentId", "description": "The payment Id.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the refund.", "required": true, "schema": { "$ref": "#/definitions/CreatePaymentRefundRequest" } } ], "responses": { "201": { "description": "Refund was created and will be processed.", "schema": { "$ref": "#/definitions/RefundCreatedModel" }, "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." }, "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": [ "folios.manage", "admin" ] } ] } }, "/finance/v1/invoices/preview-pdf": { "get": { "tags": [ "Invoice" ], "summary": "Gets a preview invoice PDF for one specific folio.", "description": "Gets a preview invoice PDF for one specific folio.
You must have this scope: 'invoices.read'.", "operationId": "FinanceInvoicesPreview-pdfGet", "produces": [ "application/pdf", "application/json" ], "parameters": [ { "in": "query", "name": "languageCode", "description": "The language in which the invoice should be produced.", "required": true, "type": "string" }, { "in": "query", "name": "folioId", "description": "The ID of the folio for which the invoice should be created.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "type": "file" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.read", "admin" ] } ] } }, "/finance/v1/invoices/preview": { "get": { "tags": [ "Invoice" ], "summary": "Gets an invoice preview for one specific folio.", "description": "To see if the invoice creation would be successful, check the warnings.
You must have this scope: 'invoices.read'.", "operationId": "FinanceInvoicesPreviewGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "folioId", "description": "The ID of the folio for which the invoice should be created.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: company. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "company" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/PreviewInvoiceModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.read", "admin" ] } ] } }, "/finance/v1/invoices": { "get": { "tags": [ "Invoice" ], "summary": "Gets the list of all invoices (the metadata only, not the files).", "description": "Gets the list of all invoices (the metadata only, not the files).
You must have this scope: 'invoices.read'.", "operationId": "FinanceInvoicesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "number", "description": "The invoice number", "type": "string" }, { "in": "query", "name": "status", "description": "Filter by invoice status", "type": "string", "enum": [ "FullyPaid", "Unpaid" ] }, { "in": "query", "name": "checkedOutOnAccountsReceivable", "description": "If set to {true}, only return invoices with an open balance (AR)\r\nOtherwise, returns all.", "type": "boolean" }, { "in": "query", "name": "outstandingPaymentFilter", "description": "Filter for the outstanding balance for invoices
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by invoice date
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "propertyIds", "description": "Filter by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "reservationIds", "description": "Filter by reservation IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "folioIds", "description": "Filter by folio IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "nameSearch", "description": "Find invoices for a recipient name or company. Provide at least three characters.", "type": "string" }, { "in": "query", "name": "paymentSettled", "description": "If set to {true}, returns only invoices having no outstanding payments or marked as settled.\r\nIf set to {false}, returns only invoices with outstanding payment and not marked as settled.\r\nIf not set, returns all invoices.", "type": "boolean" }, { "in": "query", "name": "companyIds", "description": "Filter by company IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: allowedActions, company. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "allowedActions", "company" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/InvoiceListModel" } }, "204": { "description": "No invoices found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.read", "admin" ] } ] }, "post": { "tags": [ "Invoice" ], "summary": "Creates an invoice for one specific folio.", "description": "Creates an invoice for one specific folio. The invoice can only be created once.\r\nThe debitor needs to have name, city, postal code and country code, as these are required for invoices.\r\nIf the folio is not fully paid, this will check out the reservation on AR and create an invoice with outstanding payments.
You must have at least one of these scopes: 'invoices.create, invoices.manage'.", "operationId": "FinanceInvoicesPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The folio ID to create the invoice for.", "required": true, "schema": { "$ref": "#/definitions/CreateInvoicePdfRequest" } } ], "responses": { "201": { "description": "The invoice was created successfully.", "schema": { "$ref": "#/definitions/InvoiceCreatedModel" }, "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." }, "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": [ "invoices.create", "invoices.manage", "admin" ] } ] } }, "/finance/v1/invoices/{id}/pdf": { "get": { "tags": [ "Invoice" ], "summary": "Gets an invoice PDF file.", "description": "Gets an invoice PDF file by its ID. Only works for invoices that have already been created using POST /invoices.
You must have this scope: 'invoices.read'.", "operationId": "FinanceInvoicesByIdPdfGet", "produces": [ "application/pdf", "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The invoice ID.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "type": "file" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.read", "admin" ] } ] } }, "/finance/v1/invoices/{id}": { "get": { "tags": [ "Invoice" ], "summary": "Gets invoice data.", "description": "Gets invoice data by its ID. Only works for invoices that have already been created using POST /invoices.
You must have this scope: 'invoices.read'.", "operationId": "FinanceInvoicesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The invoice ID.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: company. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "company" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/InvoiceModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.read", "admin" ] } ] } }, "/finance/v1/invoice-actions/{id}/pay": { "put": { "tags": [ "InvoiceAction" ], "summary": "Marks an invoice as paid.", "description": "Settles the invoice, if the invoice has an amount to be paid (total != 0).
You must have this scope: 'invoices.manage'.", "operationId": "FinanceInvoice-actionsByIdPayPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The invoice ID", "required": true, "type": "string" }, { "in": "body", "name": "body", "description": "see class", "required": true, "schema": { "$ref": "#/definitions/PayInvoiceRequest" } } ], "responses": { "204": { "description": "Invoice marked as paid." }, "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." }, "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": [ "invoices.manage", "admin" ] } ] } }, "/finance/v1/invoice-actions/{id}/cancel": { "put": { "tags": [ "InvoiceAction" ], "summary": "Cancels an invoice", "description": "For regular invoices and AR invoices that haven't been paid yet, creates a new cancellation invoice and opens the folio again.\r\nFor advance invoices, creates a new cancellation invoice.
You must have this scope: 'invoices.manage'.", "operationId": "FinanceInvoice-actionsByIdCancelPut", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The invoice ID", "required": true, "type": "string" } ], "responses": { "204": { "description": "Invoice canceled." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "invoices.manage", "admin" ] } ] } }, "/finance/v1/accounts/aggregate-pairs-daily": { "post": { "tags": [ "SubLedger" ], "summary": "Aggregates transactions pairs by date (business day) for all accounts and a given period.", "description": "Returns total amount credited from one account to another
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsAggregate-pairs-dailyPost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property transactions will be aggregated for.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "reference", "description": "Filter transactions by reference (reservation id/external folio id/property id for house folio).", "type": "string" }, { "in": "query", "name": "accountNumber", "description": "Filter transactions by account number", "type": "string" }, { "in": "query", "name": "accountType", "description": "Filter transactions by type", "type": "string", "enum": [ "Revenues", "Payments", "Liabilities", "Receivables", "Vat", "House", "AccountsReceivable", "CityTaxes", "TransitoryItems", "VatOnLiabilities", "LossOfAccountsReceivable" ] }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report (2-letter ISO code)", "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AccountingTransactionPairListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/aggregate-daily": { "post": { "tags": [ "SubLedger" ], "summary": "Aggregates transactions by date (business day) for all accounts and a given period.", "description": "Returns credited and debited amounts aggregated by transactions' date (business day) for all accounts and a given period.\r\nStores an entry in the export audit log.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsAggregate-dailyPost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property transactions will be aggregated for.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "reference", "description": "Filter transactions by reference (reservation id/external folio id/property id for house folio).", "type": "string" }, { "in": "query", "name": "accountNumber", "description": "Filter transactions by account number", "type": "string" }, { "in": "query", "name": "accountType", "description": "Filter transactions by type", "type": "string", "enum": [ "Revenues", "Payments", "Liabilities", "Receivables", "Vat", "House", "AccountsReceivable", "CityTaxes", "TransitoryItems", "VatOnLiabilities", "LossOfAccountsReceivable" ] }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report (2-letter ISO code)", "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AggregateTransactionListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/aggregate": { "post": { "tags": [ "SubLedger" ], "summary": "Aggregates transactions by timestamp for all accounts and a given period.", "description": "Returns credited and debited amounts aggregated by transactions' timestamp for all accounts and a given period.\r\nStores an entry in the export audit log.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsAggregatePost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property for which transactions will be exported", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start time of the posting date.\r\nEither posting date or business date interval should be specified.
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The exclusive end time of the posting date.\r\nEither posting date or business date interval should be specified.
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "accountNumber", "description": "Filter transactions by account number", "type": "string" }, { "in": "query", "name": "accountType", "description": "Filter transactions by type", "type": "string", "enum": [ "Revenues", "Payments", "Liabilities", "Receivables", "Vat", "House", "AccountsReceivable", "CityTaxes", "TransitoryItems", "VatOnLiabilities", "LossOfAccountsReceivable" ] }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AggregateTransactionListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/export": { "post": { "tags": [ "SubLedger" ], "summary": "Returns transactions filtered by timestamp for a property for a given period.", "description": "Returns the raw transaction data for a given property and time period.\r\nStores an entry in the export audit log.
You must have at least one of these scopes: 'transactions.export, accounting.read'.", "operationId": "FinanceAccountsExportPost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property for which transactions will be exported", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start time of the posting date.\r\nEither posting date or business date interval should be specified.
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The exclusive end time of the posting date.\r\nEither posting date or business date interval should be specified.
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "accountNumber", "description": "Filter transactions by account number", "type": "string" }, { "in": "query", "name": "accountType", "description": "Filter transactions by type", "type": "string", "enum": [ "Revenues", "Payments", "Liabilities", "Receivables", "Vat", "House", "AccountsReceivable", "CityTaxes", "TransitoryItems", "VatOnLiabilities", "LossOfAccountsReceivable" ] }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AccountingTransactionListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "transactions.export", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/export-daily": { "post": { "tags": [ "SubLedger" ], "summary": "Returns transactions filtered by date (business day) for a property for a given period.", "description": "Returns the raw transaction data for a given property and time period.\r\nStores an entry in the export audit log.
You must have at least one of these scopes: 'transactions.export, accounting.read'.", "operationId": "FinanceAccountsExport-dailyPost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property transactions will be aggregated for.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "reference", "description": "Filter transactions by reference (reservation id/external folio id/property id for house folio).", "type": "string" }, { "in": "query", "name": "accountNumber", "description": "Filter transactions by account number", "type": "string" }, { "in": "query", "name": "accountType", "description": "Filter transactions by type", "type": "string", "enum": [ "Revenues", "Payments", "Liabilities", "Receivables", "Vat", "House", "AccountsReceivable", "CityTaxes", "TransitoryItems", "VatOnLiabilities", "LossOfAccountsReceivable" ] }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report (2-letter ISO code)", "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AccountingTransactionListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "transactions.export", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/export-gross-daily": { "post": { "tags": [ "SubLedger" ], "summary": "Returns gross transactions filtered by date (business day) for a property for a given period.", "description": "Returns the raw transaction data for a given property and time period.\r\nStores an entry in the export audit log.
You must have at least one of these scopes: 'transactions.export, accounting.read'.", "operationId": "FinanceAccountsExport-gross-dailyPost", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Specifies the property transactions will be aggregated for.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "reference", "description": "Filter transactions by reference (reservation id/external folio id/property id for house folio).", "type": "string" }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/ExportGrossTransactionListModel" } }, "204": { "description": "No transactions found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "transactions.export", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/schema": { "get": { "tags": [ "SubLedger" ], "summary": "Returns the chart of accounts of the subledger.", "description": "Returns the schema of subledger, split into global and guest ledger.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsSchemaGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter account list by property ID", "required": true, "type": "string" }, { "in": "query", "name": "depth", "description": "How many hierarchy levels to include (between 1 and 4, default is 1).", "type": "integer", "format": "int32", "maximum": 2147483647, "minimum": 1 }, { "in": "query", "name": "includeArchived", "description": "If set to true, also includes archived accounts. If not set, or set to false, it only returns non-archived accounts", "type": "boolean" }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report. If not specified, language code from \"Accept-Language\" will be used.", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/ChartOfAccountsModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/global-accounts": { "get": { "tags": [ "SubLedger" ], "summary": "Returns a list of global accounts.", "description": "Returns a list of accounts in one property, having the same global account as parent.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceGlobal-accountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter account list by property ID", "required": true, "type": "string" }, { "in": "query", "name": "parent", "description": "Filter account list by the parent account's number.", "required": true, "type": "string" }, { "in": "query", "name": "includeArchived", "description": "If set to true, also includes archived accounts. If not set, or set to false, it only returns non-archived accounts", "type": "boolean" }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FinanceAccountListModel" } }, "204": { "description": "No accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/guest-accounts": { "get": { "tags": [ "SubLedger" ], "summary": "Returns a list of guest accounts.", "description": "Returns a list of accounts in one property for a reservation.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceGuest-accountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter account list by property id", "required": true, "type": "string" }, { "in": "query", "name": "reservationId", "description": "Filter account list by reservation id", "required": true, "type": "string" }, { "in": "query", "name": "parent", "description": "Filter account list by the parent account's number.", "type": "string" }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FinanceAccountListModel" } }, "204": { "description": "No accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/external-accounts": { "get": { "tags": [ "SubLedger" ], "summary": "Returns a list of external accounts.", "description": "Returns a list of accounts in one property for a folio.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceExternal-accountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter account list by property id", "required": true, "type": "string" }, { "in": "query", "name": "folioId", "description": "Filter account list by folio id", "required": true, "type": "string" }, { "in": "query", "name": "parent", "description": "Filter account list by the parent account's number.", "type": "string" }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FinanceAccountListModel" } }, "204": { "description": "No accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/{number}": { "get": { "tags": [ "SubLedger" ], "summary": "Returns one account.", "description": "Returns one account, as specified by its number and the property.
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsByNumberGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "number", "description": "The account number", "required": true, "type": "string" }, { "in": "query", "name": "propertyId", "description": "Specifies the property the account is in.", "required": true, "type": "string" }, { "in": "query", "name": "transactionLimit", "description": "Limit how many transactions should be included in the view (between 0 and 50, defaults to 0).", "type": "integer", "format": "int32", "maximum": 100, "minimum": 0 }, { "in": "query", "name": "includeArchived", "description": "If set to true, also includes archived accounts. If not set, or set to false, it only returns non-archived accounts", "type": "boolean" }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema. Only specify this, when you know what you are doing.", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FinanceAccountModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/accounts/child-accounts": { "get": { "tags": [ "SubLedger" ], "summary": "Returns a list of child accounts for a specified parent account.", "description": "
You must have at least one of these scopes: 'subledger.read, accounting.read'.", "operationId": "FinanceAccountsChild-accountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter account list by property id", "required": true, "type": "string" }, { "in": "query", "name": "parent", "description": "Filter account list by the parent account's number.", "required": true, "type": "string" }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" }, { "in": "query", "name": "accountingSchema", "description": "Allows to override the default accounting schema", "type": "string", "enum": [ "Simple", "Extended" ] }, { "in": "query", "name": "includeArchived", "description": "If set to true, also includes archived accounts. If not set, or set to false, it only returns non-archived accounts", "type": "boolean" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FinanceAccountListModel" } }, "204": { "description": "No accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "accounting.read", "admin" ] } ] } }, "/finance/v1/types/currencies": { "get": { "tags": [ "Types" ], "summary": "Returns a list of all currencies.", "description": "Returns a list of all currencies.", "operationId": "FinanceTypesCurrenciesGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CurrencyListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" } } } } }, "/finance/v1/types/payment-methods": { "get": { "tags": [ "Types" ], "summary": "Returns a list of all supported payment methods.", "description": "Returns a list of all supported payment methods.", "operationId": "FinanceTypesPayment-methodsGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/PaymentMethodListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" } } } } }, "/finance/v1/types/service-types": { "get": { "tags": [ "Types" ], "summary": "Returns a list of all supported service types.", "description": "Returns a list of all supported service types.", "operationId": "FinanceTypesService-typesGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/ServiceTypeListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" } } } } }, "/finance/v1/types/vat": { "get": { "tags": [ "Types" ], "summary": "Returns a list of all VAT types.", "description": "Returns a list of all VAT types and percents for a country. Supported:
\r\n- Belgium (BE)
\r\n- Botswana (BW)
\r\n- Cape Verde (CV)
\r\n- Croatia (HR)
\r\n- Czech Republic (CZ)
\r\n- Denmark (DK)
\r\n- Finland (FI)
\r\n- France (FR) - without the super-reduced 2.1% VAT
\r\n- French Polynesia (PF)
\r\n- Germany (DE)
\r\n- Morocco (MA)
\r\n- Netherlands (NL)
\r\n- Norway (NO) - without the VAT for raw fish supplies
\r\n- Spain (ES)
\r\n- South Africa (ZA)
\r\n- Sweden (SE)
\r\n- Switzerland (CH)
\r\n- United Kingdom (GB)", "operationId": "FinanceTypesVatGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "isoCountryCode", "description": "The 2-letter ISO country code", "required": true, "type": "string" }, { "in": "query", "name": "atDate", "description": "If specified, returns only the VAT types that are in place for this specific date.\r\nIf nothing specified, returns all VAT types that existed and will exist for the country.", "type": "string", "format": "date" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/VatListModel" } }, "204": { "description": "No VAT setup for the specified country." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" } } } } }, "/settings/v1/capture-policies": { "get": { "tags": [ "CapturePolicies" ], "summary": "Get all capture policies.", "description": "Get the list of capture policies.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsCapture-policiesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter capture policies by the specified property", "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CapturePolicyListModel" } }, "204": { "description": "No capture 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." }, "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" ] } ] } }, "/settings/v1/capture-policies/{id}": { "get": { "tags": [ "CapturePolicies" ], "summary": "Get a specific capture policy.", "description": "Get a specific capture policy.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsCapture-policiesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the capture policy.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CapturePolicyModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "CapturePolicies" ], "summary": "Allows to modify properties of a capture policy.", "description": "Here is the list of operations that are currently allowed:\r\n- Replace captureNoShowFee flag\r\n- Replace captureCancellationFee flag\r\n- Replace capturePrepayment flag\r\n- Replace PostOtaBankTransferOnCheckOut flag\r\n- Replace capturePayment configuration
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsCapture-policiesByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the capture 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." }, "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/v1/city-tax": { "post": { "tags": [ "CityTax" ], "summary": "Create a city tax.", "description": "You can only create one city tax per property. It can be changed and deleted any time.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsCity-taxPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the city tax.", "required": true, "schema": { "$ref": "#/definitions/CreateCityTaxModel" } } ], "responses": { "201": { "description": "City tax successfully created.", "schema": { "$ref": "#/definitions/CityTaxCreatedModel" }, "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." }, "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": [ "CityTax" ], "summary": "Get all city taxes.", "description": "Get the list of all city taxes.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsCity-taxGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter by the specified property", "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CityTaxListModel" } }, "204": { "description": "No city taxes found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" ] } ] } }, "/settings/v1/city-tax/{id}": { "get": { "tags": [ "CityTax" ], "summary": "Get a specific city tax.", "description": "Get a specific city tax.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsCity-taxByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the city tax.", "required": true, "type": "string" }, { "in": "query", "name": "languages", "description": "'all' or comma separated list of two-letter language codes (ISO Alpha-2)", "type": "array", "items": { "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CityTaxModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "CityTax" ], "summary": "Allows to modify city tax", "description": "Here is the list of operations that are currently allowed:\r\n- Replace name and description\r\n- Replace value and type\r\n- Replace or delete the VAT type
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsCity-taxByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the city tax 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." }, "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": [ "CityTax" ], "summary": "Delete a city tax", "description": "Use this call to delete a city tax.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsCity-taxByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the city tax to remove.", "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." }, "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/v1/sub-accounts": { "get": { "tags": [ "CustomSubAccounts" ], "summary": "Returns a list of all sub-accounts.", "description": "Returns a list of all sub-accounts.
You must have at least one of these scopes: 'subledger.read, setup.read, setup.manage'.", "operationId": "SettingsSub-accountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "ID of the property", "required": true, "type": "string" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CustomSubAccountsListModel" } }, "204": { "description": "No sub-accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "setup.read", "setup.manage", "admin" ] } ] }, "post": { "tags": [ "CustomSubAccounts" ], "summary": "Create a sub-account.", "description": "Create a sub-account.
You must have at least one of these scopes: 'subledger.manage, setup.manage'.", "operationId": "SettingsSub-accountsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the sub-account.", "required": true, "schema": { "$ref": "#/definitions/CreateCustomSubAccountModel" } } ], "responses": { "201": { "description": "Creation of the new sub-account was successful.", "schema": { "$ref": "#/definitions/CustomSubAccountCreatedModel" }, "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." }, "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": [ "subledger.manage", "setup.manage", "admin" ] } ] } }, "/settings/v1/sub-accounts/$count": { "get": { "tags": [ "CustomSubAccounts" ], "summary": "Returns number of sub-accounts.", "description": "Returns number of sub-account.
You must have at least one of these scopes: 'subledger.read, setup.read, setup.manage'.", "operationId": "SettingsSub-accounts$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "ID of the property", "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." }, "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": [ "subledger.read", "setup.read", "setup.manage", "admin" ] } ] } }, "/settings/v1/sub-accounts/{id}": { "get": { "tags": [ "CustomSubAccounts" ], "summary": "Returns one sub-account.", "description": "Get a sub-account by ID.
You must have at least one of these scopes: 'subledger.read, setup.read, setup.manage'.", "operationId": "SettingsSub-accountsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the sub-account.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/CustomSubAccountModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.read", "setup.read", "setup.manage", "admin" ] } ] }, "patch": { "tags": [ "CustomSubAccounts" ], "summary": "Allows to modify the name of the sub-account.", "description": "Allows to modify the name of the sub-account.
You must have at least one of these scopes: 'subledger.manage, setup.manage'.", "operationId": "SettingsSub-accountsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the sub-account.", "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 sub-account 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." }, "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": [ "subledger.manage", "setup.manage", "admin" ] } ] }, "head": { "tags": [ "CustomSubAccounts" ], "summary": "Check if the sub-account exists.", "description": "Check if the sub-account exists.
You must have at least one of these scopes: 'subledger.read, setup.read, setup.manage'.", "operationId": "SettingsSub-accountsByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The ID of the sub-account.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The sub-account exists." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "subledger.read", "setup.read", "setup.manage", "admin" ] } ] }, "delete": { "tags": [ "CustomSubAccounts" ], "summary": "Delete a custom sub-account", "description": "Use this call to delete a custom sub-accounts.\r\nWhen you delete a custom sub-account, the corresponding accounting accounts are either archived (if there are some transactions posted),\r\nor deleted (if no transactions were posted).
You must have at least one of these scopes: 'subledger.manage, setup.manage'.", "operationId": "SettingsSub-accountsByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the sub-accounts.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the sub-account was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "subledger.manage", "setup.manage", "admin" ] } ] } }, "/settings/v1/features/{propertyId}": { "get": { "tags": [ "FeatureSettings" ], "summary": "Get feature settings for a property.", "description": "Get feature settings for a property.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsFeaturesByPropertyIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The ID of the property.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Returns feature settings.", "schema": { "$ref": "#/definitions/FeatureSettingsModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "FeatureSettings" ], "summary": "Allows to modify feature settings", "description": "Here is the list of operations that are currently allowed:\r\n- Replace areCustomRevenueSubAccountsEnabled flag\r\n- Replace performAccountingWhenInvoiceIsMarkedAsPaid flag\r\n- Replace showRecipientForEachLineItemOnTheInvoice flag\r\n- Replace addCityTaxOnReservationCreation flag\r\n- Replace maxAmountForMinimalInvoices value\r\n- Replace invoiceNumberPattern value\r\n- Replace advanceInvoiceNumberPattern value
You must have at least one of these scopes: 'features.toggle, setup.manage'.", "operationId": "SettingsFeaturesByPropertyIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The ID of the property you want to toggle features for.", "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." }, "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": [ "features.toggle", "setup.manage", "admin" ] } ] } }, "/settings/v1/invoice-address": { "get": { "tags": [ "InvoiceAddress" ], "summary": "Get invoice addresses", "description": "Get the list of all invoice addresses.
You must have at least one of these scopes: 'setup.read, setup.manage, settings.read, settings.manage'.", "operationId": "SettingsInvoice-addressGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyIds", "description": "", "type": "array", "items": { "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/InvoiceAddressListModel" } }, "204": { "description": "No content." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "admin", "setup.read", "setup.manage", "settings.read", "settings.manage" ] } ] }, "put": { "tags": [ "InvoiceAddress" ], "summary": "Create or update invoice addresses for one or more properties.", "description": "If the address does not exist for one of the specified properties, it is created. If it exists, it is completely replaced.
You must have at least one of these scopes: 'setup.manage, settings.manage'.", "operationId": "SettingsInvoice-addressPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyIds", "required": true, "type": "array", "items": { "type": "string" } }, { "in": "body", "name": "body", "description": "Address displayed on invoices.", "required": true, "schema": { "$ref": "#/definitions/InvoiceAddressCreateOrReplaceModel" } } ], "responses": { "204": { "description": "No content." }, "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." }, "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": [ "admin", "setup.manage", "settings.manage" ] } ] }, "patch": { "tags": [ "InvoiceAddress" ], "summary": "Change fields in the invoice address of one or more properties.", "description": "Here is the list of operations that are currently allowed:\r\n- Replace AddressLine1\r\n- Add, replace or delete AddressLine2\r\n- Replace PostalCode\r\n- Replace City\r\n- Replace CountryCode
You must have at least one of these scopes: 'setup.manage, settings.manage'.", "operationId": "SettingsInvoice-addressPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyIds", "required": true, "type": "array", "items": { "type": "string" } }, { "in": "body", "name": "body", "description": "", "required": true, "schema": { "type": "array", "items": { "$ref": "#/definitions/Operation" } } } ], "responses": { "204": { "description": "No content." }, "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." }, "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": [ "admin", "setup.manage", "settings.manage" ] } ] } }, "/settings/v1/languages": { "get": { "tags": [ "Languages" ], "summary": "Get the language settings for the account", "description": "Get the language settings
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsLanguagesGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Returns all the account languages.", "schema": { "$ref": "#/definitions/LanguagesModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" ] } ] }, "put": { "tags": [ "Languages" ], "summary": "Replaces the language settings for the account", "description": "Use this call to modify the language settings of the account.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsLanguagesPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "body", "description": "The definition of the language settings.", "required": true, "schema": { "$ref": "#/definitions/ReplaceLanguagesModel" } } ], "responses": { "200": { "description": "Success" }, "204": { "description": "Replace of the language settings 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." }, "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/v1/properties/{id}": { "get": { "tags": [ "PropertySettings" ], "summary": "Get property settings", "description": "Get base settings for a property.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsPropertiesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the property.", "required": true, "type": "string" } ], "responses": { "200": { "description": "Returns property settings.", "schema": { "$ref": "#/definitions/PropertySettingsModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" ] } ] } }, "/settings/v1/properties/{propertyId}/time-slice-definitions/{id}": { "get": { "tags": [ "TimeSliceDefinitions" ], "summary": "Get a specific time slice definition", "description": "Get a specific time slice definition for a property. A time slice definition specifies\r\nthe pattern for recurring time slots. The time slots define when reservations\r\nin the property can start or end.\r\nIt is used in the rate plans when managing prices for renting out the units.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsPropertiesByPropertyIdTime-slice-definitionsByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "path", "name": "id", "description": "The id of the time slice definition.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Returns the time slice definition.", "schema": { "$ref": "#/definitions/TimeSliceDefinitionModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "TimeSliceDefinitions" ], "summary": "Modifies a specific time slice definition for the property", "description": "Use this call to modify a time slice definition of the property.\r\nHere is the list of operations that are currently allowed:\r\n- Replace Name\r\n- Replace CheckInTime (only possible if the time slice definition is not in-use)\r\n- Replace CheckOutTime (only possible if the time slice definition is not in-use)
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsPropertiesByPropertyIdTime-slice-definitionsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "path", "name": "id", "description": "The id of the time slice definition.", "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": { "200": { "description": "Success" }, "204": { "description": "Time slice definition 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." }, "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": [ "TimeSliceDefinitions" ], "summary": "Delete a certain time slice definition", "description": "Use this call to delete a time slice definition. This is only possible if a time slice definition is not in-use
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsPropertiesByPropertyIdTime-slice-definitionsByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "path", "name": "id", "description": "The id of the time slice definition.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the time slice definition was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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/v1/properties/{propertyId}/time-slice-definitions": { "get": { "tags": [ "TimeSliceDefinitions" ], "summary": "Get time slice definitions", "description": "Get all time slice definitions for a property. A time slice definition specifies\r\nthe pattern for recurring time slots. The time slots define when reservations\r\nin the property can start or end.\r\nThey are used in the rate plans when managing prices for renting out the units.
You must have at least one of these scopes: 'settings.read, setup.read, setup.manage'.", "operationId": "SettingsPropertiesByPropertyIdTime-slice-definitionsGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: actions. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "actions" ], "type": "string" } } ], "responses": { "200": { "description": "Returns the time slice definitions.", "schema": { "$ref": "#/definitions/TimeSliceDefinitionListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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" ] } ] }, "post": { "tags": [ "TimeSliceDefinitions" ], "summary": "Creates a time slice definition", "description": "Use this call to create a time slice definition.
You must have at least one of these scopes: 'settings.manage, setup.manage'.", "operationId": "SettingsPropertiesByPropertyIdTime-slice-definitionsPost", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "propertyId", "description": "The id of the property.", "required": true, "type": "string" }, { "in": "header", "name": "Idempotency-Key", "description": "Unique key for safely retrying requests without accidentally performing the same operation twice. \nWe'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The payload of the time slice definition.", "required": true, "schema": { "$ref": "#/definitions/CreateTimeSliceDefinitionModel" } } ], "responses": { "201": { "description": "Creation of a new time slice definition was successful.", "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." }, "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" ] } ] } }, "/account/v1/accounts/current": { "get": { "tags": [ "Account" ], "summary": "Returns the current account.", "description": "Retrieves information about the current account.
You need to be authorized (no particular scope required)", "operationId": "AccountAccountsCurrentGet", "produces": [ "application/json" ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/AccountModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ ] } ] }, "put": { "tags": [ "Account" ], "summary": "Replaces an existing account.", "description": "Completely replaces an account with the new definition passed in. The old data will be lost.
You must have this scope: 'account.manage'.", "operationId": "AccountAccountsCurrentPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "body", "description": "The definition of the account.", "required": true, "schema": { "$ref": "#/definitions/ReplaceAccountModel" } } ], "responses": { "200": { "description": "Success" }, "204": { "description": "The account has been replaced." }, "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." }, "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": [ "account.manage", "admin" ] } ] } }, "/account/v1/accounts": { "get": { "tags": [ "Account" ], "summary": "Returns all accounts", "description": "Get the list of accounts.
You must have this scope: 'accounts.read'.", "operationId": "AccountAccountsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "accountCodes", "description": "Filter result by requested codes", "type": "array", "items": { "type": "string" } } ], "responses": { "200": { "description": "Return all accounts.", "schema": { "$ref": "#/definitions/AccountListModel" } }, "204": { "description": "There are no accounts found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "accounts.read" ] } ] }, "post": { "tags": [ "Account" ], "summary": "Creates an account with an admin user.", "description": "Use this call to create a new account.
You must have this scope: 'account.create'.", "operationId": "AccountAccountsPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the account.", "required": true, "schema": { "$ref": "#/definitions/CreateAccountModel" } } ], "responses": { "201": { "description": "Creation of the new account was successful.", "schema": { "$ref": "#/definitions/AccountCreatedModel" }, "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." }, "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": [ "account.create" ] } ] } }, "/account/v1/account-actions/current/suspend": { "put": { "tags": [ "AccountActions" ], "summary": "Suspend the account.", "description": "Suspends the current account.\r\nThis changes the account type to 'Suspended'.
You must have this scope: 'account.manage'.", "operationId": "AccountAccount-actionsCurrentSuspendPut", "produces": [ "application/json" ], "responses": { "204": { "description": "Suspension of the account was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "account.manage", "admin" ] } ] } }, "/account/v1/account-actions/current/set-live": { "put": { "tags": [ "AccountActions" ], "summary": "Move the account to live.", "description": "Move the current account to live.\r\nThis changes the account type to 'Live'.
You must have this scope: 'account.manage'.", "operationId": "AccountAccount-actionsCurrentSet-livePut", "produces": [ "application/json" ], "responses": { "204": { "description": "Moving account to live was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "account.manage", "admin" ] } ] } }, "/operations/v1/maintenances": { "get": { "tags": [ "Maintenance" ], "summary": "Get list of maintenances", "description": "Get a list of maintenances matching your filter.
You must have at least one of these scopes: 'maintenances.read, maintenances.manage'.", "operationId": "OperationsMaintenancesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter result by property id", "type": "string" }, { "in": "query", "name": "unitId", "description": "Filter result by unit id", "type": "string" }, { "in": "query", "name": "from", "description": "Filter all maintenance windows that end after the specified date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "Filter all maintenance windows that start before the specified date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "types", "description": "Filter result by maintenance types", "type": "array", "items": { "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ], "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: unit. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "unit" ], "type": "string" } } ], "responses": { "200": { "description": "Return all maintenances.", "schema": { "$ref": "#/definitions/MaintenanceListModel" } }, "204": { "description": "No maintenances for this unit could be found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "maintenances.read", "maintenances.manage", "admin" ] } ] }, "post": { "tags": [ "Maintenance" ], "summary": "Create a new maintenance window", "description": "Use this call to create a new maintenance window for the given unit. You can only create maintenances for today and days in the future.
You must have at least one of these scopes: 'maintenances.create, maintenances.manage'.", "operationId": "OperationsMaintenancesPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the maintenance.", "required": true, "schema": { "$ref": "#/definitions/CreateMaintenanceModel" } } ], "responses": { "201": { "description": "Creation of the new maintenance was successful.", "schema": { "$ref": "#/definitions/MaintenanceCreatedModel" }, "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." }, "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": [ "maintenances.create", "maintenances.manage", "admin" ] } ] } }, "/operations/v1/maintenances/$count": { "get": { "tags": [ "Maintenance" ], "summary": "Returns number of maintenances", "description": "Returns the number of maintenances matching your filter.
You must have at least one of these scopes: 'maintenances.read, maintenances.manage'.", "operationId": "OperationsMaintenances$countGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Filter result by property id", "type": "string" }, { "in": "query", "name": "unitId", "description": "Filter result by unit id", "type": "string" }, { "in": "query", "name": "from", "description": "Filter all maintenance windows that end after the specified date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "Filter all maintenance windows that start before the specified date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "types", "description": "Filter result by maintenance types", "type": "array", "items": { "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ], "type": "string" } } ], "responses": { "200": { "description": "Count of maintenances", "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." }, "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": [ "maintenances.read", "maintenances.manage", "admin" ] } ] } }, "/operations/v1/maintenances/bulk": { "post": { "tags": [ "Maintenance" ], "summary": "Create multiple maintenances", "description": "Use this call to create multiple maintenances.
You must have at least one of these scopes: 'maintenances.create, setup.manage'.", "operationId": "OperationsMaintenancesBulkPost", "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'll always send back the same response for requests made with the same key, \nand keys can't be reused with different request parameters. Keys expire after 24 hours.", "type": "string" }, { "in": "body", "name": "body", "description": "The definition of the maintenances.", "required": true, "schema": { "$ref": "#/definitions/BulkCreateMaintenancesModel" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/BulkMaintenancesCreatedModel" } }, "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." }, "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": [ "maintenances.create", "setup.manage", "admin" ] } ] } }, "/operations/v1/maintenances/{id}": { "patch": { "tags": [ "Maintenance" ], "summary": "Modify a maintenance", "description": "You can only change maintenances which are in the future or still ongoing today.\r\nHere is the list of operations that are currently allowed:\r\n- Add, replace and remove Description\r\n- Replace From and To. 'From' cannot be changed, if the maintenance started yesterday or before.
You must have this scope: 'maintenances.manage'.", "operationId": "OperationsMaintenancesByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the maintenance.", "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": { "200": { "description": "Success" }, "204": { "description": "The maintenance 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." }, "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": [ "maintenances.manage", "admin" ] } ] }, "delete": { "tags": [ "Maintenance" ], "summary": "Delete a maintenance", "description": "Use this call to delete a maintenance. It is not possible to delete maintenances that started yesterday or earlier.
You must have at least one of these scopes: 'maintenances.delete, maintenances.manage'.", "operationId": "OperationsMaintenancesByIdDelete", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the maintenance.", "required": true, "type": "string" } ], "responses": { "204": { "description": "Deletion of the maintenance was successful." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "maintenances.delete", "maintenances.manage", "admin" ] } ] }, "get": { "tags": [ "Maintenance" ], "summary": "Get a specific maintenance", "description": "Get a specific maintenance by ID.
You must have at least one of these scopes: 'maintenances.read, maintenances.manage'.", "operationId": "OperationsMaintenancesByIdGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The ID of the maintenance.", "required": true, "type": "string" }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: unit. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "unit" ], "type": "string" } } ], "responses": { "200": { "description": "Return all the data for the maintenance.", "schema": { "$ref": "#/definitions/MaintenanceModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "maintenances.read", "maintenances.manage", "admin" ] } ] }, "head": { "tags": [ "Maintenance" ], "summary": "Check if a maintenance exists", "description": "Check if a maintenance exists by ID.
You must have at least one of these scopes: 'maintenances.read, maintenances.manage'.", "operationId": "OperationsMaintenancesByIdHead", "parameters": [ { "in": "path", "name": "id", "description": "The ID of the maintenance.", "required": true, "type": "string" } ], "responses": { "200": { "description": "The maintenance exists." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "500": { "description": "An unexpected error occurred." }, "503": { "description": "The server is currently unavailable. Please try later." } }, "security": [ { "oauth2": [ "maintenances.read", "maintenances.manage", "admin" ] } ] } }, "/operations/v1/night-audit": { "put": { "tags": [ "Operations" ], "summary": "Performs the night audit for one property.", "description": "The night audit will post all charges for services that were delivered on the past business day in the folio and set all occupied rooms to 'Dirty'
You must have at least one of these scopes: 'operations.manage, operations.trigger-night-audit'.", "operationId": "OperationsNight-auditPut", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The property the night audit should be performed for", "required": true, "type": "string" }, { "in": "query", "name": "setReservationsToNoShow", "description": "Flag if reservations in the state confirmed, which should have been checked in by now, should be marked as no show.\r\n \r\nThe default value is true and we strongly advise against setting it to false,\r\nbecause different reports rely on setting reservations which were not checked in correctly to no show.", "type": "boolean" } ], "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." }, "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": [ "operations.manage", "operations.trigger-night-audit", "admin" ] } ] } }, "/operations/v1/units-condition": { "put": { "tags": [ "Operations" ], "summary": "Change the condition of a unit", "description": "
You must have this scope: 'operations.change-room-state'.", "operationId": "OperationsUnits-conditionPut", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "body", "description": "Array of unit Ids with their respective new condition", "required": true, "schema": { "$ref": "#/definitions/ReplaceUnitConditionListModel" } } ], "responses": { "200": { "description": "The unit condition has been updated" }, "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." }, "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": [ "operations.change-room-state", "admin" ] } ] } }, "/logs/v1/booking/reservation": { "get": { "tags": [ "BookingLogs" ], "summary": "Returns reservation change log entries sorted by the timestamp.", "description": "
You must have this scope: 'logs.read'.", "operationId": "LogsBookingReservationGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "reservationIds", "description": "Filter the log entries by reservation IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "eventTypes", "description": "Filter the log entries by event types.", "type": "array", "items": { "enum": [ "Created", "Amended", "CheckedIn", "CheckedOut", "Canceled", "SetToNoShow", "CityTaxAdded", "CityTaxRemoved", "UnitAssigned", "UnitUnassigned", "PaymentAccountSet", "PaymentAccountRemoved", "InvoiceStatusChanged", "Changed" ], "type": "string" } }, { "in": "query", "name": "clientIds", "description": "Filter the log entries by client IDs (which application triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "propertyIds", "description": "Filter the log entries by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "subjectIds", "description": "Filter the log entries by subject IDs (which user triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by event date and time
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: changes. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "changes" ], "type": "string" } } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/ReservationChangeLogListModel" } }, "204": { "description": "No reservation change logs found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "logs.read", "admin" ] } ] } }, "/logs/v1/finance/folio": { "get": { "tags": [ "FinanceLogs" ], "summary": "Returns folio change log entries sorted by the timestamp.", "description": "
You must have this scope: 'logs.read'.", "operationId": "LogsFinanceFolioGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "folioIds", "description": "Filter the log entries by folio IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "eventTypes", "description": "Filter the log entries by event types.", "type": "array", "items": { "enum": [ "Created", "ChargePosted", "TransitoryChargePosted", "AllowancePosted", "PaymentPosted", "ChargeMovedFromFolio", "TransitoryChargeMovedFromFolio", "PaymentMovedFromFolio", "ChargeMovedToFolio", "TransitoryChargeMovedToFolio", "PaymentMovedToFolio", "Closed", "Reopened", "Deleted", "DebitorChanged", "AllowanceMovedFromFolio", "AllowanceMovedToFolio", "RefundPosted", "RefundMovedFromFolio", "RefundMovedToFolio", "InvoiceCreated", "InvoiceCanceled", "InvoicePaid", "ChargesChanged", "PaymentAdded", "PaymentFailed", "PaymentCanceled", "RefundAdded", "RefundFailed" ], "type": "string" } }, { "in": "query", "name": "clientIds", "description": "Filter the log entries by client IDs (which application triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "propertyIds", "description": "Filter the log entries by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "subjectIds", "description": "Filter the log entries by subject IDs (which user triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by event date and time
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/FolioChangeLogListModel" } }, "204": { "description": "No folio change logs found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "logs.read", "admin" ] } ] } }, "/logs/v1/finance/night-audit": { "get": { "tags": [ "FinanceLogs" ], "summary": "Returns the night audit logs.", "description": "Returns a log of all night audits\r\nNewest log entries are returned first.
You must have this scope: 'logs.read'.", "operationId": "LogsFinanceNight-auditGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "statuses", "description": "Filter the log entries by status.", "type": "array", "items": { "enum": [ "InProgress", "Success", "Failure" ], "type": "string" } }, { "in": "query", "name": "propertyIds", "description": "Filter the log entries by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "subjectIds", "description": "Filter the log entries by subject IDs (which user triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by event date and time
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/NightAuditLogListModel" } }, "204": { "description": "No night audit logs found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "logs.read", "admin" ] } ] } }, "/logs/v1/finance/transactions-export": { "get": { "tags": [ "FinanceLogs" ], "summary": "Returns the audit log for all accounting exports that have been done.", "description": "Returns the audit log for all exports if accounting data that have been done.
You must have this scope: 'logs.read'.", "operationId": "LogsFinanceTransactions-exportGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "types", "description": "Filter the log entries by export log types.", "type": "array", "items": { "enum": [ "Raw", "Aggregate", "AggregatePairs" ], "type": "string" } }, { "in": "query", "name": "propertyIds", "description": "Filter the log entries by property IDs", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "subjectIds", "description": "Filter the log entries by subject IDs (which user triggered this event)", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Filter by event date and time
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Success.", "schema": { "$ref": "#/definitions/TransactionsExportLogListModel" } }, "204": { "description": "No transactions export logs found." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "logs.read", "admin" ] } ] } }, "/reports/v1/reports/ordered-services": { "get": { "tags": [ "Reports" ], "summary": "List of ordered services", "description": "Returns a list of ordered services per day with information about the guest and the reservation this service was ordered for.
You must have this scope: 'reports.read'.", "operationId": "ReportsReportsOrdered-servicesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Property Id", "required": true, "type": "string" }, { "in": "query", "name": "serviceIds", "description": "Service ids the report should be generated for", "required": true, "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval.", "required": true, "type": "string", "format": "date" } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/OrderedServicesListModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reports.read", "admin" ] } ] } }, "/reports/v1/reports/arrivals": { "get": { "tags": [ "Reports" ], "summary": "Returns the number of arrivals in a month for a property", "description": "Returns number of arriving guests for a property for a certain month. Only over-night rateplans are considered.
\r\nIncludes statistical information on purpose of travel, and nationality. The data is taken from the primary guest only.\r\nThe status considered are: in-house, confirmed, and checked out.
You must have this scope: 'reports.read'.", "operationId": "ReportsReportsArrivalsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Requested property.", "required": true, "type": "string" }, { "in": "query", "name": "month", "description": "Requested month for the report.", "required": true, "type": "integer", "format": "int32" }, { "in": "query", "name": "year", "description": "Requested year for the report.", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/GuestReportModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reports.read", "admin" ] } ] } }, "/reports/v1/reports/property-performance": { "get": { "tags": [ "Reports" ], "summary": "Returns the property performance report which includes the ADR and the RevPAR for each business day.", "description": "The property performance API return you key performance indicator for the selected property like occupancy, ADR and RevPAR.\r\nIt only considers the originally booked amounts for sold units excluding any additional services or manually posted charges\r\nor allowances. The results can be filterd to only show you data for a certain part of the business. For example you can exclude\r\nday-use reservations or complimentary rate plans.
You must have this scope: 'reports.read'.", "operationId": "ReportsReportsProperty-performanceGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The ID of the property", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The inclusive end date of the interval", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "companyIds", "description": "The company IDs used to filter the retrieved data", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "ratePlanIds", "description": "The rate plan IDs used to filter the retrieved data", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupTypes", "description": "The unit group types used to filter the retrieved data", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "The unit group IDs used to filter the retrieved data", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "The time slice definition IDs used to filter the retrieved data", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "channelCodes", "description": "The channel codes used to filter the retrieved data", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "travelPurpose", "description": "The travel purpose to filter the retrieved data", "type": "string", "enum": [ "Business", "Leisure" ] }, { "in": "query", "name": "expand", "description": "List of all embedded resources that should be expanded in the response. Possible values are: businessDays. All other values will be silently ignored.", "type": "array", "items": { "enum": [ "businessDays" ], "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/PropertyPerformanceReportModel" } }, "204": { "description": "Success" }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reports.read", "admin" ] } ] } }, "/reports/v1/reports/company-invoices-vat": { "get": { "tags": [ "Reports" ], "summary": "Returns the list of company invoices with information on the company and the VAT breakdown", "description": "
You must have this scope: 'reports.read'.", "operationId": "ReportsReportsCompany-invoices-vatGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Property ID", "required": true, "type": "string" }, { "in": "query", "name": "companyIds", "description": "Company IDs the report should be generated for", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "dateFilter", "description": "Set a date interval to get the report for. Cannot be more than 1 month.
You can provide an array of string expressions which all need to apply.
Each expression has the form of 'OPERATION_VALUE' where VALUE needs to be of the valid format of the property type and OPERATION can be:
'eq' for equals
'neq' for not equals
'lt' for less than
'gt' for greater than
'lte' for less than or equals
'gte' for greater than or equals
For instance
'eq_5' would mean the value should equal 5
'lte_7' would mean the value should be less than or equal to 7", "type": "array", "items": { "type": "string" } } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/CompaniesVatReportListModel" } }, "204": { "description": "Success" }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reports.read", "admin" ] } ] } }, "/reports/v1/reports/revenues": { "get": { "tags": [ "Reports" ], "summary": "Returns the revenues report for a property", "description": "
You must have this scope: 'reports.read'.", "operationId": "ReportsReportsRevenuesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "Property ID", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "The inclusive start date of the interval.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "The exclusive end date of the interval. The interval is limited to 3 months.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "languageCode", "description": "The language for the the report", "type": "string" } ], "responses": { "200": { "description": "", "schema": { "$ref": "#/definitions/RevenuesReportItemModel" } }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "reports.read", "admin" ] } ] } }, "/availability/v1/units": { "get": { "tags": [ "Availability" ], "summary": "Get a list of all available units in a property", "description": "Get the list of available units for a specific property and time period.
You must have this scope: 'availability.read'.", "operationId": "AvailabilityUnitsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The property id", "required": true, "type": "string" }, { "in": "query", "name": "unitGroupId", "description": "The unit group id", "type": "string" }, { "in": "query", "name": "from", "description": "The from date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The to date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "required": true, "type": "string", "format": "date-time" }, { "in": "query", "name": "includeOutOfService", "description": "Should units that are set OutOfService in the defined time period be returned as available.", "type": "boolean" }, { "in": "query", "name": "unitCondition", "description": "The unit condition", "type": "string", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ] }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Return all available units.", "schema": { "$ref": "#/definitions/AvailableUnitListModel" } }, "204": { "description": "There are no available units matching your criteria." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "availability.read", "admin" ] } ] } }, "/availability/v1/unit-groups": { "get": { "tags": [ "Availability" ], "summary": "Get a list of all available unit groups in a property", "description": "Get the list of available unit groups for a specific property and time period.
You must have this scope: 'availability.read'.", "operationId": "AvailabilityUnit-groupsGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The property id", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "First day of the requested time period. The given day will be included in the response.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "Last day of the requested time period. The given day will be included in the response.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "unitGroupTypes", "description": "Filter result by requested unit group types", "type": "array", "items": { "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "The time slice definition ids", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "unitGroupIds", "description": "The unit group ids", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "adults", "description": "The number of adults you want availability for, defaults to 1", "type": "integer", "format": "int32" }, { "in": "query", "name": "childrenAges", "description": "The ages of the children you want availability for", "type": "array", "items": { "format": "int32", "type": "integer" } }, { "in": "query", "name": "onlySellable", "description": "When set to 'true', only the unit groups sold by the specified time slice template and time slice definition ids are returned,\r\notherwise all unit groups are returned", "type": "boolean" }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Return all available unit groups.", "schema": { "$ref": "#/definitions/AvailableUnitGroupListModel" } }, "204": { "description": "There are no available unit groups matching your criteria." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "availability.read", "admin" ] } ] } }, "/availability/v1/unit-groups/{id}": { "patch": { "tags": [ "Availability" ], "summary": "Allows to modify the unit group availability", "description": "You can replace AllowedOverbooking for a unit group
You must have this scope: 'availability.manage'.", "operationId": "AvailabilityUnit-groupsByIdPatch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "Id of the unit group to be modified.", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "First day of the time period from which availability will be modified", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "Last day of the time period until which availability will be modified", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template", "required": true, "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "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." }, "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": [ "availability.manage", "admin" ] } ] } }, "/availability/v1/services": { "get": { "tags": [ "Availability" ], "summary": "Get a list of all available services in a property", "description": "Get the list of available services for a specific property and time period.
You must have this scope: 'availability.read'.", "operationId": "AvailabilityServicesGet", "produces": [ "application/json" ], "parameters": [ { "in": "query", "name": "propertyId", "description": "The property id", "required": true, "type": "string" }, { "in": "query", "name": "from", "description": "First day of the requested time period. The given day will be included in the response.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "to", "description": "Last day of the requested time period. The given day will be included in the response.", "required": true, "type": "string", "format": "date" }, { "in": "query", "name": "timeSliceTemplate", "description": "The time slice template, defaults to 'over night'", "type": "string", "enum": [ "DayUse", "OverNight" ] }, { "in": "query", "name": "timeSliceDefinitionIds", "description": "The time slice definition ids", "type": "array", "items": { "type": "string" } }, { "in": "query", "name": "channelCodes", "description": "The channel code used to filter the services", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Return all available services.", "schema": { "$ref": "#/definitions/AvailableServiceListModel" } }, "204": { "description": "There are no available services matching your criteria." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "availability.read", "admin" ] } ] } }, "/availability/v1/reservations/{id}/units": { "get": { "tags": [ "ReservationAvailability" ], "summary": "Get a list of all available units for a reservation", "description": "Get the list of available units for a specific reservation and time period.
You must have at least one of these scopes: 'availability.read, reservations.manage'.", "operationId": "AvailabilityReservationsByIdUnitsGet", "produces": [ "application/json" ], "parameters": [ { "in": "path", "name": "id", "description": "The id of the reservation", "required": true, "type": "string" }, { "in": "query", "name": "unitGroupId", "description": "The unit group id", "type": "string" }, { "in": "query", "name": "from", "description": "The from date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "to", "description": "The to date and time
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string", "format": "date-time" }, { "in": "query", "name": "includeOutOfService", "description": "Should units that are set OutOfService in the defined time period be returned as available.", "type": "boolean" }, { "in": "query", "name": "unitCondition", "description": "The unit condition", "type": "string", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ] }, { "in": "query", "name": "pageNumber", "description": "Page number, starting from 1 and defaulting to 1. Results in 204 if there are no items on that page.", "type": "integer", "default": 1 }, { "in": "query", "name": "pageSize", "description": "Page size. If this is not set, the pageNumber will be ignored and all values returned.", "type": "integer", "default": 100 } ], "responses": { "200": { "description": "Return all available units for the reservation.", "schema": { "$ref": "#/definitions/AvailableUnitListModel" } }, "204": { "description": "There are no available units matching your criteria." }, "404": { "description": "The Request-URI could not be found." }, "400": { "description": "Bad request." }, "401": { "description": "You are unauthorized." }, "403": { "description": "Forbidden." }, "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": [ "availability.read", "reservations.manage", "admin" ] } ] } } }, "definitions": { "ActionModel[PropertyAction,NotAllowedPropertyActionReason]": { "required": [ "action", "isAllowed" ], "type": "object", "properties": { "action": { "enum": [ "Delete", "Archive", "SetLive", "DeleteTransactionalData" ], "type": "string" }, "isAllowed": { "type": "boolean" }, "reasons": { "type": "array", "items": { "$ref": "#/definitions/ActionReasonModel[NotAllowedPropertyActionReason]" } } } }, "ActionReasonModel[NotAllowedPropertyActionReason]": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "enum": [ "DeleteNotAllowedForPropertyNotInStatusTest", "ArchiveNotAllowedForPropertyNotInStatusLive", "ArchiveNotAllowedForPropertyWhichIsAlreadyArchived", "SetToLiveNotAllowedForPropertyNotInStatusTest", "SetToLiveNotAllowedForPropertyInNonLiveAccount", "DeleteTransactionalDataNotAllowedForPropertyNotInStatusTest" ], "type": "string" }, "message": { "type": "string" } } }, "AddressModel": { "required": [ "addressLine1", "city", "countryCode", "postalCode" ], "type": "object", "properties": { "addressLine1": { "type": "string" }, "addressLine2": { "type": "string" }, "postalCode": { "type": "string" }, "city": { "type": "string" }, "regionCode": { "type": "string" }, "countryCode": { "type": "string" } } }, "BankAccountModel": { "type": "object", "properties": { "iban": { "type": "string" }, "bic": { "type": "string" }, "bank": { "type": "string" } } }, "BulkCreateUnitsModel": { "type": "object", "properties": { "propertyId": { "description": "The id of the property where the units will be created - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "string" }, "names": { "description": "The list of unit names - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "array", "items": { "type": "string" } }, "description": { "description": "The description, used for all units - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "object", "additionalProperties": { "type": "string" } }, "unitGroupId": { "description": "The id of the unit group used for all units - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "string" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the units - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "integer" }, "condition": { "description": "Condition of the unit - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ], "type": "string" }, "attributes": { "description": "Collection of user defined attributes of unit - DEPRECATED: This field will be removed at 15.08.2021. Use `Units` for creating in bulk instead", "type": "array", "items": { "$ref": "#/definitions/CreateUnitAttributeModel" } }, "units": { "type": "array", "items": { "$ref": "#/definitions/CreateUnitModel" } } }, "example": "{\n \"maxPersons\": 0,\n \"condition\": \"Clean\",\n \"attributes\": [],\n \"units\": [\n {\n \"propertyId\": \"MUC\",\n \"name\": \"Vermont\",\n \"description\": {\n \"en\": \"Small meetingroom\",\n \"de\": \"Kleiner Meetingraum\"\n },\n \"unitGroupId\": \"MUC-MEET\",\n \"maxPersons\": 12,\n \"condition\": \"Clean\",\n \"attributes\": [\n {\n \"id\": \"ADVFSSUL\"\n }\n ]\n },\n {\n \"propertyId\": \"MUC\",\n \"name\": \"Montreal\",\n \"description\": {\n \"en\": \"Small meetingroom\",\n \"de\": \"Kleiner Meetingraum\"\n },\n \"unitGroupId\": \"MUC-MEET\",\n \"maxPersons\": 12,\n \"condition\": \"Clean\",\n \"attributes\": [\n {\n \"id\": \"ADVFSSUL\"\n }\n ]\n }\n ]\n}" }, "BulkUnitsCreatedModel": { "required": [ "ids" ], "type": "object", "properties": { "ids": { "description": "The unit ids", "type": "array", "items": { "type": "string" } } }, "example": "{\n \"ids\": [\n \"MUC-CFP\",\n \"MUC-XTA\",\n \"MUC-CPZ\"\n ]\n}" }, "CountModel": { "required": [ "count" ], "type": "object", "properties": { "count": { "format": "int64", "type": "integer" } }, "example": "{\n \"count\": 50\n}" }, "CountryListModel": { "required": [ "countryCodes" ], "type": "object", "properties": { "countryCodes": { "description": "List of ISO country codes.", "type": "array", "items": { "type": "string" } } }, "example": "{\n \"countryCodes\": [\n \"DE\",\n \"US\"\n ]\n}" }, "CreateAddressModel": { "required": [ "addressLine1", "city", "countryCode", "postalCode" ], "type": "object", "properties": { "addressLine1": { "type": "string" }, "addressLine2": { "type": "string" }, "postalCode": { "type": "string" }, "city": { "type": "string" }, "regionCode": { "description": "The ISO 3166-2 code", "maxLength": 6, "minLength": 2, "type": "string" }, "countryCode": { "description": "The country code, in ISO 3166-1 alpha-2 code", "maxLength": 2, "minLength": 2, "type": "string" } } }, "CreatePropertyModel": { "required": [ "code", "commercialRegisterEntry", "companyName", "currencyCode", "defaultCheckInTime", "defaultCheckOutTime", "location", "name", "paymentTerms", "taxId", "timeZone" ], "type": "object", "properties": { "code": { "description": "The code for the property that can be shown in reports and table views", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the property", "type": "object", "additionalProperties": { "type": "string" } }, "companyName": { "description": "The legal name of the company running the property.", "type": "string" }, "managingDirectors": { "description": "The managing director(s) of the company, as they should appear on invoices", "type": "string" }, "commercialRegisterEntry": { "description": "The entry in the Commercial Reigster of the company running the property, as it should appear on invoices", "type": "string" }, "taxId": { "description": "The Tax-ID of the company running the property, as it should appear on invoices", "type": "string" }, "description": { "description": "The description for the property", "type": "object", "additionalProperties": { "type": "string" } }, "location": { "$ref": "#/definitions/CreateAddressModel" }, "bankAccount": { "$ref": "#/definitions/BankAccountModel" }, "paymentTerms": { "description": "The payment terms used for all rate plans", "type": "object", "additionalProperties": { "type": "string" } }, "timeZone": { "description": "The time zone name of the property from the IANA Time Zone Database.\r\n(see: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)", "type": "string" }, "defaultCheckInTime": { "description": "The default check-in time
A time (without fractional second part) as defined in the ISO8601:2004", "type": "string" }, "defaultCheckOutTime": { "description": "The default check-out time
A time (without fractional second part) as defined in the ISO8601:2004", "type": "string" }, "currencyCode": { "description": "The currency a property works with.", "type": "string" } }, "example": "{\n \"code\": \"MUC\",\n \"name\": {\n \"en\": \"Demo Hotel Munich\",\n \"de\": \"Demo Hotel München\"\n },\n \"companyName\": \"Hotel Münchner GmbH\",\n \"managingDirectors\": \"Franz-Josef Gruber\",\n \"commercialRegisterEntry\": \"Amtsgericht München, HRB 279336\",\n \"taxId\": \"DE311053702\",\n \"description\": {\n \"en\": \"This is the demo hotel Munich\",\n \"de\": \"Dies ist das Demo Hotel München\"\n },\n \"location\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"bankAccount\": {\n \"iban\": \"DE44 5001 0517 5407 3249 31\",\n \"bic\": \"SSKMDEMMXXX\",\n \"bank\": \"Stadtsparkasse München\"\n },\n \"paymentTerms\": {\n \"en\": \"Pay on checkout\",\n \"de\": \"Zahlung bei Checkout\"\n },\n \"timeZone\": \"Europe/Berlin\",\n \"defaultCheckInTime\": \"17:00:00\",\n \"defaultCheckOutTime\": \"11:00:00\",\n \"currencyCode\": \"EUR\"\n}" }, "CreateUnitAttributeDefinitionModel": { "required": [ "name" ], "type": "object", "properties": { "name": { "description": "The name of the unit attribute", "maxLength": 50, "minLength": 1, "type": "string" }, "description": { "description": "The description of the unit attribute", "type": "string" } }, "example": "{\n \"name\": \"Floor 1\",\n \"description\": \"Floor number\"\n}" }, "CreateUnitAttributeModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Id of unit attribute", "type": "string" } } }, "CreateUnitGroupModel": { "required": [ "code", "description", "maxPersons", "name", "propertyId" ], "type": "object", "properties": { "code": { "description": "The code for the unit group that can be shown in reports and table views", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "propertyId": { "description": "The id of the property where unit group will be created", "type": "string" }, "name": { "description": "The name for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit group", "maximum": 2147483647, "minimum": 1, "type": "integer" }, "rank": { "format": "int32", "description": "The unit group rank\r\nRestrictions:\r\n- Should be greater or equal to one", "maximum": 2147483647, "minimum": 1, "type": "integer" }, "type": { "description": "The unit group type", "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot" ], "type": "string" } }, "example": "{\n \"code\": \"DBL\",\n \"propertyId\": \"MUC\",\n \"name\": {\n \"en\": \"Double Room\",\n \"de\": \"Doppelzimmer\"\n },\n \"description\": {\n \"en\": \"This is a nice room with as kingsize bed and flat screen\",\n \"de\": \"Dies ist ein schönes Zimmer mit Kingsize-Bett und Flachbildschirm\"\n },\n \"maxPersons\": 4,\n \"rank\": 1,\n \"type\": \"BedRoom\"\n}" }, "CreateUnitModel": { "required": [ "description", "maxPersons", "name", "propertyId" ], "type": "object", "properties": { "propertyId": { "description": "The id of the property where the unit will be created", "type": "string" }, "name": { "description": "The name for the unit", "type": "string" }, "description": { "description": "The description for the unit", "type": "object", "additionalProperties": { "type": "string" } }, "unitGroupId": { "description": "The id of the unit group", "type": "string" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit", "maximum": 2147483647, "minimum": 1, "type": "integer" }, "condition": { "description": "Condition of the unit", "enum": [ "Clean", "CleanToBeInspected", "Dirty" ], "type": "string" }, "attributes": { "description": "Collection of user defined attributes of unit", "type": "array", "items": { "$ref": "#/definitions/CreateUnitAttributeModel" } } }, "example": "{\n \"propertyId\": \"MUC\",\n \"name\": \"A.102\",\n \"description\": {\n \"en\": \"Room 102\",\n \"de\": \"Zimmer 102\"\n },\n \"unitGroupId\": \"MUC-DBL\",\n \"maxPersons\": 4,\n \"condition\": \"Clean\",\n \"attributes\": []\n}" }, "EmbeddedPropertyModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The property id", "type": "string" }, "code": { "description": "The code for the property that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the property", "type": "string" }, "description": { "description": "The description for the property", "type": "string", "readOnly": true } } }, "EmbeddedUnitGroupModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The unit group id", "type": "string" }, "code": { "description": "The code for the unit group that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the unit group", "type": "string" }, "description": { "description": "The description for the unit group", "type": "string" }, "type": { "description": "The unit group type", "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } } }, "MessageItemCollection": { "type": "object", "properties": { "messages": { "type": "array", "items": { "type": "string" }, "readOnly": true } } }, "Operation": { "type": "object", "properties": { "value": { }, "path": { "type": "string" }, "op": { "type": "string" }, "from": { "type": "string" } } }, "PropertyCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The property id", "type": "string" } }, "example": "{\n \"id\": \"MUC\"\n}" }, "PropertyItemModel": { "required": [ "code", "commercialRegisterEntry", "companyName", "created", "currencyCode", "id", "isArchived", "isTemplate", "location", "name", "paymentTerms", "status", "taxId", "timeZone" ], "type": "object", "properties": { "id": { "description": "The property id", "type": "string" }, "code": { "description": "The code for the property that can be shown in reports and table views", "type": "string" }, "propertyTemplateId": { "description": "The id of the property used as a template while creating the property", "type": "string" }, "isTemplate": { "description": "Whether the property can be used as a template for other properties", "type": "boolean" }, "name": { "description": "The name for the property", "type": "string" }, "description": { "description": "The description for the property", "type": "string" }, "companyName": { "description": "The legal name of the company running the property.", "type": "string" }, "managingDirectors": { "description": "The managing director(s) of the company, as they should appear on invoices", "type": "string" }, "commercialRegisterEntry": { "description": "The entry in the Commercial Register of the company running the property, as it should appear on invoices", "type": "string" }, "taxId": { "description": "The Tax-ID of the company running the property, as it should appear on invoices", "type": "string" }, "location": { "$ref": "#/definitions/AddressModel" }, "bankAccount": { "$ref": "#/definitions/BankAccountModel" }, "paymentTerms": { "description": "The payment terms used for all rate plans", "type": "object", "additionalProperties": { "type": "string" } }, "timeZone": { "description": "The time zone name of the property from the IANA Time Zone Database.\r\n(see: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)", "type": "string" }, "currencyCode": { "description": "The currency a property works with.", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "status": { "description": "The status of the property", "enum": [ "Test", "Live" ], "type": "string" }, "isArchived": { "description": "Is the property archived", "type": "boolean" }, "actions": { "description": "The list of actions for this property", "type": "array", "items": { "$ref": "#/definitions/ActionModel[PropertyAction,NotAllowedPropertyActionReason]" } } } }, "PropertyListModel": { "required": [ "count", "properties" ], "type": "object", "properties": { "properties": { "description": "List of properties", "type": "array", "items": { "$ref": "#/definitions/PropertyItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"properties\": [\n {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"isTemplate\": true,\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\",\n \"location\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"timeZone\": \"Europe/Berlin\",\n \"created\": \"0001-01-01T00:00:00Z\",\n \"status\": \"Test\",\n \"isArchived\": false\n },\n {\n \"id\": \"BER\",\n \"code\": \"BER\",\n \"propertyTemplateId\": \"MUC\",\n \"isTemplate\": false,\n \"name\": \"Demo Hotel Berlin\",\n \"description\": \"This is the demo hotel Berlin\",\n \"location\": {\n \"addressLine1\": \"Mohrenstraße 30\",\n \"postalCode\": \"10117\",\n \"city\": \"Berlin\",\n \"countryCode\": \"DE\"\n },\n \"timeZone\": \"Europe/Berlin\",\n \"created\": \"0001-01-01T00:00:00Z\",\n \"status\": \"Test\",\n \"isArchived\": false\n }\n ],\n \"count\": 0\n}" }, "PropertyModel": { "description": "With this request you can create a new property", "required": [ "code", "commercialRegisterEntry", "companyName", "created", "currencyCode", "id", "isArchived", "isTemplate", "location", "name", "paymentTerms", "status", "taxId", "timeZone" ], "type": "object", "properties": { "id": { "description": "The property id", "type": "string" }, "code": { "description": "The code for the property that can be shown in reports and table views", "type": "string" }, "propertyTemplateId": { "description": "The id of the property used as a template while creating the property", "type": "string" }, "isTemplate": { "description": "Whether the property can be used as a template for other properties", "type": "boolean" }, "name": { "description": "The name for the property", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the property", "type": "object", "additionalProperties": { "type": "string" } }, "companyName": { "description": "The legal name of the company running the property.", "type": "string" }, "managingDirectors": { "description": "The managing director(s) of the company, as they should appear on invoices", "type": "string" }, "commercialRegisterEntry": { "description": "The entry in the Commercial Register of the company running the property, as it should appear on invoices", "type": "string" }, "taxId": { "description": "The Tax-ID of the company running the property, as it should appear on invoices", "type": "string" }, "location": { "$ref": "#/definitions/AddressModel" }, "bankAccount": { "$ref": "#/definitions/BankAccountModel" }, "paymentTerms": { "description": "The payment terms used for all rate plans", "type": "object", "additionalProperties": { "type": "string" } }, "timeZone": { "description": "The time zone name of the property from the IANA Time Zone Database.\r\n(see: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)", "type": "string" }, "currencyCode": { "description": "The currency a property works with.", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "status": { "description": "The status of the property", "enum": [ "Test", "Live" ], "type": "string" }, "isArchived": { "description": "Is the property archived", "type": "boolean" }, "actions": { "description": "The list of actions for this property", "type": "array", "items": { "$ref": "#/definitions/ActionModel[PropertyAction,NotAllowedPropertyActionReason]" } } }, "example": "{\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"propertyTemplateId\": \"BER\",\n \"isTemplate\": false,\n \"name\": {\n \"en\": \"Demo Hotel Munich\",\n \"de\": \"Demo Hotel München\"\n },\n \"description\": {\n \"en\": \"This is the demo hotel Munich\",\n \"de\": \"Dies ist das Demo Hotel München\"\n },\n \"companyName\": \"Hotel Münchner GmbH\",\n \"managingDirectors\": \"Franz-Josef Gruber\",\n \"commercialRegisterEntry\": \"Amtsgericht München, HRB 279336\",\n \"taxId\": \"DE311053702\",\n \"location\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"bankAccount\": {\n \"iban\": \"DE44 5001 0517 5407 3249 31\",\n \"bic\": \"SSKMDEMMXXX\",\n \"bank\": \"Stadtsparkasse München\"\n },\n \"paymentTerms\": {\n \"en\": \"Pay on checkout\",\n \"de\": \"Zahlung bei Checkout\"\n },\n \"timeZone\": \"Europe/Berlin\",\n \"currencyCode\": \"EUR\",\n \"created\": \"0001-01-01T00:00:00Z\",\n \"status\": \"Test\",\n \"isArchived\": false\n}" }, "ReplaceUnitGroupModel": { "required": [ "description", "name" ], "type": "object", "properties": { "name": { "description": "The name for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit group.\r\nIf this value is increased, the surcharges for the related rate plans must be specified in order for the rate plans to be sellable for the new possible occupancies.", "type": "integer" }, "rank": { "format": "int32", "description": "The unit group rank\r\nRestrictions:\r\n- Should be greater or equal to one", "maximum": 2147483647, "minimum": 1, "type": "integer" } }, "example": "{\n \"name\": {\n \"en\": \"Double Room\",\n \"de\": \"Doppelzimmer\"\n },\n \"description\": {\n \"en\": \"This is a nice room with as kingsize bed and flat screen\",\n \"de\": \"Dies ist ein schönes Zimmer mit Kingsize-Bett und Flachbildschirm\"\n },\n \"maxPersons\": 4,\n \"rank\": 2\n}" }, "UnitAttributeDefinitionCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The unit attribute id", "type": "string" } }, "example": "{\n \"id\": \"FLOOR\"\n}" }, "UnitAttributeDefinitionListModel": { "required": [ "count", "unitAttributes" ], "type": "object", "properties": { "unitAttributes": { "description": "List of unit attributes", "type": "array", "items": { "$ref": "#/definitions/UnitAttributeDefinitionModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"unitAttributes\": [\n {\n \"id\": \"KQOSXHLS\",\n \"name\": \"Floor 1\",\n \"description\": \"Floor number\"\n },\n {\n \"id\": \"ADVFSSUL\",\n \"name\": \"Street view\",\n \"description\": \"View from the room\"\n }\n ],\n \"count\": 2\n}" }, "UnitAttributeDefinitionModel": { "required": [ "id", "name" ], "type": "object", "properties": { "id": { "description": "The id of the unit attribute", "type": "string" }, "name": { "description": "The name of the unit attribute", "type": "string" }, "description": { "description": "The description of the unit attribute", "type": "string" } }, "example": "{\n \"id\": \"KQOSXHLS\",\n \"name\": \"Floor 1\",\n \"description\": \"Floor number\"\n}" }, "UnitAttributeModel": { "required": [ "id", "name" ], "type": "object", "properties": { "id": { "description": "Id of unit attribute", "type": "string" }, "name": { "description": "The name of the unit attribute", "type": "string" }, "description": { "description": "Description of unit attribute", "type": "string" } } }, "UnitCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The unit id", "type": "string" } }, "example": "{\n \"id\": \"MUC-CFP\"\n}" }, "UnitGroupCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The unit group id", "type": "string" } }, "example": "{\n \"id\": \"MUC-DBL\"\n}" }, "UnitGroupItemModel": { "required": [ "code", "description", "id", "memberCount", "name", "property", "type" ], "type": "object", "properties": { "id": { "description": "The unit group id", "type": "string" }, "code": { "description": "The code for the unit group that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the unit group", "type": "string" }, "description": { "description": "The description for the unit group", "type": "string" }, "memberCount": { "format": "int32", "description": "Number of units in this group", "type": "integer" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit group", "type": "integer" }, "rank": { "format": "int32", "description": "The unit group rank", "type": "integer" }, "type": { "description": "The unit group type", "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" } } }, "UnitGroupListModel": { "required": [ "count", "unitGroups" ], "type": "object", "properties": { "unitGroups": { "description": "List of unit groups", "type": "array", "items": { "$ref": "#/definitions/UnitGroupItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"unitGroups\": [\n {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double Room\",\n \"description\": \"This is a nice room with as kingsize bed and flat screen\",\n \"memberCount\": 2,\n \"maxPersons\": 4,\n \"rank\": 2,\n \"type\": \"BedRoom\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n }\n },\n {\n \"id\": \"BER-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard Room\",\n \"description\": \"This is a nice room with as standard bed\",\n \"memberCount\": 5,\n \"maxPersons\": 2,\n \"rank\": 1,\n \"type\": \"BedRoom\",\n \"property\": {\n \"id\": \"BER\",\n \"code\": \"BER\",\n \"name\": \"Demo Hotel Berlin\",\n \"description\": \"This is the demo hotel Berlin\"\n }\n }\n ],\n \"count\": 0\n}" }, "UnitGroupModel": { "description": "With this request you can create a new property", "required": [ "code", "description", "id", "maxPersons", "memberCount", "name", "property", "type" ], "type": "object", "properties": { "id": { "description": "The unit group id", "type": "string" }, "code": { "description": "The code for the unit group that can be shown in reports and table views", "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "name": { "description": "The name for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "memberCount": { "format": "int32", "description": "Number of units in this group", "type": "integer" }, "description": { "description": "The description for the unit group", "type": "object", "additionalProperties": { "type": "string" } }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit group", "type": "integer" }, "rank": { "format": "int32", "description": "The unit group rank", "type": "integer" }, "type": { "description": "The unit group type", "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } }, "example": "{\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"name\": {\n \"en\": \"Double Room\",\n \"de\": \"Doppelzimmer\"\n },\n \"memberCount\": 0,\n \"description\": {\n \"en\": \"This is a nice room with as kingsize bed and flat screen\",\n \"de\": \"Dies ist ein schönes Zimmer mit Kingsize-Bett und Flachbildschirm\"\n },\n \"maxPersons\": 4,\n \"rank\": 2,\n \"type\": \"BedRoom\"\n}" }, "UnitItemMaintenanceModel": { "required": [ "id", "type" ], "type": "object", "properties": { "id": { "description": "The id for the scheduled maintenance", "type": "string" }, "type": { "description": "The type of maintenance that is planned for the unit. A small repair (OutOfService),\r\na bigger disfunction that does not allow to sell the unit (OutOfOrder) or is it\r\neven under construction and should reduce the house count (OutOfInventory)", "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ], "type": "string" } } }, "UnitItemModel": { "required": [ "created", "description", "id", "maxPersons", "name", "property", "status" ], "type": "object", "properties": { "id": { "description": "The unit id", "type": "string" }, "name": { "description": "The name for the unit", "type": "string" }, "description": { "description": "The description for the unit", "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "status": { "$ref": "#/definitions/UnitItemStatusModel" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit", "type": "integer" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "attributes": { "description": "Collection of user defined attributes of unit", "type": "array", "items": { "$ref": "#/definitions/UnitAttributeModel" } } } }, "UnitItemStatusModel": { "required": [ "condition", "isOccupied" ], "type": "object", "properties": { "isOccupied": { "type": "boolean" }, "condition": { "enum": [ "Clean", "CleanToBeInspected", "Dirty" ], "type": "string" }, "maintenance": { "$ref": "#/definitions/UnitItemMaintenanceModel" } } }, "UnitListModel": { "required": [ "count", "units" ], "type": "object", "properties": { "units": { "description": "List of units", "type": "array", "items": { "$ref": "#/definitions/UnitItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"units\": [\n {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.101\",\n \"description\": \"Room 101\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"status\": {\n \"isOccupied\": true,\n \"condition\": \"Dirty\",\n \"maintenance\": {\n \"id\": \"MUC-JQI-SGHZD\",\n \"type\": \"OutOfService\"\n }\n },\n \"maxPersons\": 4,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"attributes\": [\n {\n \"id\": \"GRTDTLDD\",\n \"name\": \"Floor 2\",\n \"description\": \"Floor number\"\n },\n {\n \"id\": \"KQOSXHLS\",\n \"name\": \"Street view\",\n \"description\": \"View from the room\"\n }\n ]\n },\n {\n \"id\": \"MUC-ELG\",\n \"name\": \"A.102\",\n \"description\": \"Room 102\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"status\": {\n \"isOccupied\": false,\n \"condition\": \"Clean\",\n \"maintenance\": {\n \"id\": \"MUC-ELG-GSZGK\",\n \"type\": \"OutOfOrder\"\n }\n },\n \"maxPersons\": 1,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"attributes\": [\n {\n \"id\": \"GRTDTLDD\",\n \"name\": \"Floor 2\",\n \"description\": \"Floor number\"\n }\n ]\n }\n ],\n \"count\": 2\n}" }, "UnitMaintenanceModel": { "required": [ "from", "id", "to", "type" ], "type": "object", "properties": { "id": { "description": "The id for the scheduled maintenance", "type": "string" }, "from": { "format": "date-time", "description": "Date and time the scheduled maintenance window starts
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "Date and time the scheduled maintenance window ends
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "type": { "description": "The type of maintenance that is planned for the unit. A small repair (OutOfService),\r\na bigger disfunction that does not allow to sell the unit (OutOfOrder) or is it\r\neven under construction and should reduce the house count (OutOfInventory)", "enum": [ "OutOfService", "OutOfOrder", "OutOfInventory" ], "type": "string" }, "description": { "description": "The description text for the maintenance", "type": "string" } } }, "UnitModel": { "required": [ "created", "description", "id", "maxPersons", "name", "property", "status" ], "type": "object", "properties": { "id": { "description": "The unit id", "type": "string" }, "name": { "description": "The name for the unit", "type": "string" }, "description": { "description": "The description for the unit", "type": "object", "additionalProperties": { "type": "string" } }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "status": { "$ref": "#/definitions/UnitStatusModel" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit", "type": "integer" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "attributes": { "description": "Collection of user defined attributes of unit", "type": "array", "items": { "$ref": "#/definitions/UnitAttributeModel" } } }, "example": "{\n \"id\": \"MUC-YTO\",\n \"name\": \"1.001\",\n \"description\": {\n \"en\": \"First Floor Room 1\",\n \"de\": \"1.OG Zimmer 1\"\n },\n \"property\": {\n \"id\": \"BER\",\n \"code\": \"BER\",\n \"name\": \"Demo Hotel Berlin\",\n \"description\": \"This is the demo hotel Berlin\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"status\": {\n \"isOccupied\": false,\n \"condition\": \"Clean\",\n \"maintenance\": {\n \"id\": \"MUC-YTO-SGHZD\",\n \"from\": \"2022-02-22T13:43:02.4227646+01:00\",\n \"to\": \"2022-02-24T13:43:02.4227646+01:00\",\n \"type\": \"OutOfService\",\n \"description\": \"The remote control for the TV needs to be replaced.\"\n }\n },\n \"maxPersons\": 2,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"attributes\": [\n {\n \"id\": \"KQOSXHLS\",\n \"name\": \"Floor 3\",\n \"description\": \"Floor number\"\n },\n {\n \"id\": \"ADVFSSUL\",\n \"name\": \"Street view\",\n \"description\": \"View from the room\"\n }\n ]\n}" }, "UnitStatusModel": { "required": [ "condition", "isOccupied" ], "type": "object", "properties": { "isOccupied": { "type": "boolean" }, "condition": { "enum": [ "Clean", "CleanToBeInspected", "Dirty" ], "type": "string" }, "maintenance": { "$ref": "#/definitions/UnitMaintenanceModel" } } }, "AccountingConfigModel": { "required": [ "serviceType", "validFrom", "vatType" ], "type": "object", "properties": { "vatType": { "description": "The VAT type", "enum": [ "Null", "VeryReduced", "Reduced", "Normal", "Without", "Special", "ReducedCovid19", "NormalCovid19" ], "type": "string" }, "serviceType": { "description": "The service type", "enum": [ "Other", "Accommodation", "FoodAndBeverages" ], "type": "string" }, "subAccountId": { "description": "The sub-accounts id", "type": "string" }, "validFrom": { "format": "date", "description": "Which date this configuration is valid from", "type": "string", "example": "2020-10-10" } }, "example": "{\n \"state\": \"Unknown\",\n \"vatType\": \"Normal\",\n \"serviceType\": \"FoodAndBeverages\",\n \"subAccountId\": \"ALCO\",\n \"validFrom\": \"2021-01-01\"\n}" }, "AgeCategoryCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The age category id", "type": "string" } }, "example": "{\n \"id\": \"MUC-BABY\"\n}" }, "AgeCategoryItemModel": { "required": [ "code", "id", "maxAge", "minAge", "name", "propertyId" ], "type": "object", "properties": { "id": { "description": "The age category id", "type": "string" }, "code": { "description": "The code for the age category", "type": "string" }, "propertyId": { "description": "The id of the property for which the age category will be created", "type": "string" }, "name": { "description": "The name for the age category", "type": "string" }, "minAge": { "format": "int32", "description": "The minimum age for the age category. The specified value is included in the age range", "type": "integer" }, "maxAge": { "format": "int32", "description": "The maximum age for the age category. The specified value is included in the age range", "type": "integer" } } }, "AgeCategoryListModel": { "required": [ "ageCategories", "count" ], "type": "object", "properties": { "ageCategories": { "description": "List of age categories", "type": "array", "items": { "$ref": "#/definitions/AgeCategoryItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"ageCategories\": [\n {\n \"id\": \"MUC-BABY\",\n \"code\": \"BABY\",\n \"name\": \"Baby\",\n \"minAge\": 0,\n \"maxAge\": 1\n },\n {\n \"id\": \"MUC-CHILD\",\n \"code\": \"CHILD\",\n \"name\": \"Child\",\n \"minAge\": 2,\n \"maxAge\": 12\n }\n ],\n \"count\": 2\n}" }, "AgeCategoryModel": { "required": [ "code", "id", "maxAge", "minAge", "name", "propertyId" ], "type": "object", "properties": { "id": { "description": "The age category id", "type": "string" }, "code": { "description": "The code for the age category", "type": "string" }, "propertyId": { "description": "The id of the property for which the age category will be created", "type": "string" }, "name": { "description": "The name for the age category", "type": "object", "additionalProperties": { "type": "string" } }, "minAge": { "format": "int32", "description": "The minimum age for the age category. The specified value is included in the age range", "type": "integer" }, "maxAge": { "format": "int32", "description": "The maximum age for the age category. The specified value is included in the age range", "type": "integer" } }, "example": "{\n \"code\": \"BABY\",\n \"propertyId\": \"MUC\",\n \"name\": {\n \"en\": \"Baby\"\n },\n \"minAge\": 0,\n \"maxAge\": 1\n}" }, "AgeCategorySurchargeModel": { "required": [ "adults", "value" ], "type": "object", "properties": { "adults": { "format": "int32", "description": "The number of adults", "type": "integer" }, "value": { "format": "int32", "description": "The absolute value in the currency of the rate plan as surcharge for each child accompanied by the given number of 'adults'.\r\nThe minimum value is 0.", "maximum": 2147483647, "minimum": 0, "type": "integer" } } }, "AvailabilityModel": { "required": [ "mode" ], "type": "object", "properties": { "mode": { "description": "You can choose if the service will only be offered\r\nfor the arrival or departure time slice like early check-in or a final cleaning service. You can also define\r\na service that is available to be booked for the whole stay. The property defaults to 'Daily'.", "enum": [ "Arrival", "Departure", "Daily" ], "type": "string" }, "quantity": { "format": "int32", "description": "Quota/Limit for service. By default service is unlimited.", "type": "integer" }, "daysOfWeek": { "description": "You can choose if the service should be available for specific days of the week", "type": "array", "items": { "enum": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ], "type": "string" } } } }, "BookingPeriodModel": { "required": [ "from", "to" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "Start of booking period
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End of booking period
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" } } }, "BookingRestrictionsModel": { "type": "object", "properties": { "minAdvance": { "$ref": "#/definitions/PeriodModel" }, "maxAdvance": { "$ref": "#/definitions/PeriodModel" }, "lateBookingUntil": { "description": "Time of day until the late booking can be made for this rate plan\r\nRestrictions:\r\n- the time has to be between the check-in (excl.) and check-out time (excl.)\r\n- can only be set, if MinAdvance is not set
A time (without fractional second part) as defined in the ISO8601:2004", "type": "string" } } }, "CalculatedRateModel": { "required": [ "adults", "price" ], "type": "object", "properties": { "adults": { "format": "int32", "description": "Number of adults this rate is valid for", "type": "integer" }, "price": { "$ref": "#/definitions/MonetaryValueModel" }, "includedServicesPrice": { "$ref": "#/definitions/MonetaryValueModel" } } }, "CancellationPolicyCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The cancellation policy ID", "type": "string" } }, "example": "{\n \"id\": \"MUC-FLE\"\n}" }, "CancellationPolicyItemModel": { "required": [ "code", "description", "fee", "id", "name", "periodFromReference", "propertyId", "reference" ], "type": "object", "properties": { "id": { "description": "Id", "type": "string" }, "name": { "description": "Name", "type": "string" }, "code": { "description": "The code for the cancellation policy", "type": "string" }, "description": { "description": "Description", "type": "string" }, "propertyId": { "description": "The id of the property where the cancellation policy was created", "type": "string" }, "periodFromReference": { "$ref": "#/definitions/PeriodModel" }, "reference": { "description": "The due date for the cancellation policy will be calculated based on this reference point, and the defined time period.\r\n

\r\nExamples:
\r\n- 1 day and 12 hours prior to arrival
\r\n- 0 prior to arrival (meaning, cancellations are always free)
\r\n- 24 hours after booking
\r\n- 0 after booking (meaning, cancellations ar never free)", "enum": [ "PriorToArrival", "AfterBooking" ], "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } } }, "CancellationPolicyListModel": { "required": [ "cancellationPolicies", "count" ], "type": "object", "properties": { "cancellationPolicies": { "description": "List of cancellation policies", "type": "array", "items": { "$ref": "#/definitions/CancellationPolicyItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"cancellationPolicies\": [\n {\n \"id\": \"MUC-FLEX\",\n \"name\": \"Flexible\",\n \"code\": \"FLEX\",\n \"description\": \"Free cancellation until 36 hours before arrival.\",\n \"propertyId\": \"MUC\",\n \"periodFromReference\": {\n \"hours\": 12,\n \"days\": 1,\n \"months\": 0\n },\n \"reference\": \"PriorToArrival\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"fixedValue\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n },\n {\n \"id\": \"BER-NONREF\",\n \"name\": \"Non Refundable\",\n \"code\": \"NONREF\",\n \"description\": \"25% refund up until 1 week prior to arrival.\",\n \"propertyId\": \"BER\",\n \"periodFromReference\": {\n \"hours\": 0,\n \"days\": 0,\n \"months\": 0\n },\n \"reference\": \"AfterBooking\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"percentValue\": {\n \"percent\": 100,\n \"limit\": 1,\n \"includeServiceIds\": [\n \"MUC-BRK\"\n ]\n }\n }\n }\n ],\n \"count\": 2\n}" }, "CancellationPolicyModel": { "required": [ "code", "description", "fee", "id", "name", "periodFromReference", "propertyId", "reference" ], "type": "object", "properties": { "id": { "description": "The cancellation policy id", "type": "string" }, "code": { "description": "The code for the policy", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the cancellation policy", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the cancellation policy", "type": "object", "additionalProperties": { "type": "string" } }, "propertyId": { "description": "The id of the property where the cancellation policy was created", "type": "string" }, "periodFromReference": { "$ref": "#/definitions/PeriodModel" }, "reference": { "description": "The due date for the cancellation policy will be calculated based on this reference point, and the defined time period.\r\n

\r\nExamples:
\r\n- 1 day and 12 hours prior to arrival
\r\n- 0 prior to arrival (meaning, cancellations are always free)
\r\n- 24 hours after booking
\r\n- 0 after booking (meaning, cancellations ar never free)", "enum": [ "PriorToArrival", "AfterBooking" ], "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } }, "example": "{\n \"id\": \"MUC-FLE\",\n \"code\": \"FLE\",\n \"name\": {\n \"en\": \"Flexible\",\n \"de\": \"Flexibel\"\n },\n \"description\": {\n \"en\": \"Free cancellation until 36 hours before arrival.\",\n \"de\": \"Kostenfreies Storno bis 36 Stunden vor Ankunft.\"\n },\n \"propertyId\": \"MUC\",\n \"periodFromReference\": {\n \"hours\": 12,\n \"days\": 1\n },\n \"reference\": \"PriorToArrival\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"percentValue\": {\n \"percent\": 100,\n \"limit\": 1,\n \"includeServiceIds\": [\n \"MUC-BRK\"\n ]\n }\n }\n}" }, "CompanyAddressModel": { "required": [ "addressLine1", "city", "countryCode", "postalCode" ], "type": "object", "properties": { "addressLine1": { "type": "string" }, "addressLine2": { "type": "string" }, "postalCode": { "type": "string" }, "city": { "type": "string" }, "regionCode": { "type": "string" }, "countryCode": { "type": "string" } } }, "CompanyCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The company ID", "type": "string" } }, "example": "{\n \"id\": \"MUC-UMBRELLA\"\n}" }, "CompanyListModel": { "required": [ "companies", "count" ], "type": "object", "properties": { "companies": { "description": "List of companies", "type": "array", "items": { "$ref": "#/definitions/CompanyModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"companies\": [\n {\n \"id\": \"MUC-UMBRELLA\",\n \"code\": \"UMBRELLA\",\n \"propertyId\": \"MUC\",\n \"name\": \"Umbrella Corp.\",\n \"taxId\": \"Tax 123456\",\n \"address\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"canCheckOutOnAr\": true\n },\n {\n \"id\": \"BER-ACME\",\n \"code\": \"ACME\",\n \"propertyId\": \"BER\",\n \"name\": \"ACME Inc.\",\n \"taxId\": \"Tax 5552221\",\n \"address\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"canCheckOutOnAr\": false\n }\n ],\n \"count\": 0\n}" }, "CompanyModel": { "required": [ "address", "canCheckOutOnAr", "code", "id", "name", "propertyId" ], "type": "object", "properties": { "id": { "description": "The ID of this company", "type": "string" }, "code": { "description": "The code for the company", "type": "string" }, "propertyId": { "description": "The ID of the property", "type": "string" }, "name": { "description": "The name of the company", "type": "string" }, "taxId": { "description": "The tax ID of the company", "type": "string" }, "address": { "$ref": "#/definitions/CompanyAddressModel" }, "canCheckOutOnAr": { "description": "Whether or not the company is allowed to check out on AR / invoice", "type": "boolean" }, "ratePlans": { "description": "Rate plans that can be booked by this company", "type": "array", "items": { "$ref": "#/definitions/RatePlanCompanyModel" } } }, "example": "{\n \"id\": \"MUC-UMBRELLA\",\n \"code\": \"UMBRELLA\",\n \"propertyId\": \"MUC\",\n \"name\": \"Umbrella Corp.\",\n \"taxId\": \"Tax 123456\",\n \"address\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"canCheckOutOnAr\": true,\n \"ratePlans\": [\n {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"corporateCode\": \"UMBRELLAINC\",\n \"name\": \"Double room flexible\"\n }\n ]\n}" }, "CompanyRatePlanModel": { "required": [ "code", "corporateCode", "id", "name" ], "type": "object", "properties": { "id": { "description": "Company ID that can use this rate plan", "type": "string" }, "code": { "description": "The code of the company that can book this rate plan", "type": "string" }, "corporateCode": { "description": "Company rate plan code, identifying the company + rate plan pair. Is used is offers.", "type": "string" }, "name": { "description": "The name of the company that can book this rate plan", "type": "string" } } }, "CorporateCodeListModel": { "required": [ "corporateCodes", "count" ], "type": "object", "properties": { "corporateCodes": { "description": "List of existing corporate codes", "type": "array", "items": { "$ref": "#/definitions/CorporateCodeModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"corporateCodes\": [\n {\n \"code\": \"APALEO-NONREF\"\n }\n ],\n \"count\": 1\n}" }, "CorporateCodeModel": { "required": [ "code" ], "type": "object", "properties": { "code": { "description": "The corporate rate code", "type": "string" } } }, "CreateAgeCategoryModel": { "required": [ "code", "maxAge", "minAge", "name", "propertyId" ], "type": "object", "properties": { "code": { "description": "The code for the age category", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "propertyId": { "description": "The id of the property for which the age category will be created", "type": "string" }, "name": { "description": "The name for the age category", "type": "object", "additionalProperties": { "type": "string" } }, "minAge": { "format": "int32", "description": "The minimum age for the age category. The specified value is included in the age range", "maximum": 17, "minimum": 0, "type": "integer" }, "maxAge": { "format": "int32", "description": "The maximum age for the age category. The specified value is included in the age range and the maximum value\r\nis 17", "maximum": 17, "minimum": 0, "type": "integer" } }, "example": "{\n \"code\": \"BABY\",\n \"propertyId\": \"MUC\",\n \"name\": {\n \"en\": \"Baby\",\n \"de\": \"Kind\"\n },\n \"minAge\": 0,\n \"maxAge\": 2\n}" }, "CreateCancellationPolicyModel": { "required": [ "code", "description", "fee", "name", "propertyId", "reference" ], "type": "object", "properties": { "code": { "description": "The code for the cancellation policy, used to assemble its id", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the cancellation policy", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the cancellation policy", "type": "object", "additionalProperties": { "type": "string" } }, "propertyId": { "description": "The id of the property where the cancellation policy will be created", "type": "string" }, "periodFromReference": { "$ref": "#/definitions/PeriodModel" }, "reference": { "description": "The due date for the cancellation policy will be calculated based on this reference point", "enum": [ "PriorToArrival", "AfterBooking" ], "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } }, "example": "{\n \"code\": \"FLE\",\n \"name\": {\n \"en\": \"Flexible\",\n \"de\": \"Flexibel\"\n },\n \"description\": {\n \"en\": \"Free cancellation until 36 hours before arrival.\",\n \"de\": \"Kostenfreies Storno bis 36 Stunden vor Ankunft.\"\n },\n \"propertyId\": \"MUC\",\n \"periodFromReference\": {\n \"hours\": 12,\n \"days\": 1\n },\n \"reference\": \"PriorToArrival\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"percentValue\": {\n \"percent\": 100,\n \"limit\": 1,\n \"includeServiceIds\": [\n \"MUC-BRK\"\n ]\n }\n }\n}" }, "CreateCompanyModel": { "required": [ "address", "canCheckOutOnAr", "code", "name", "propertyId" ], "type": "object", "properties": { "code": { "description": "The code for the company", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "propertyId": { "description": "The ID of the property", "type": "string" }, "name": { "description": "The name of the company", "type": "string" }, "taxId": { "description": "The tax ID of the company", "type": "string" }, "address": { "$ref": "#/definitions/AddressModel" }, "canCheckOutOnAr": { "description": "Whether or not the company is allowed to check out on AR / invoice", "type": "boolean" }, "ratePlans": { "description": "Rate plans that can be booked by this company", "type": "array", "items": { "$ref": "#/definitions/CreateRatePlanCompanyModel" } } }, "example": "{\n \"code\": \"UMBRELLA\",\n \"propertyId\": \"MUC\",\n \"name\": \"Umbrella Corp.\",\n \"taxId\": \"Tax 123456\",\n \"address\": {\n \"addressLine1\": \"Marienplatz 1\",\n \"postalCode\": \"80331\",\n \"city\": \"München\",\n \"countryCode\": \"DE\"\n },\n \"canCheckOutOnAr\": true,\n \"ratePlans\": [\n {\n \"id\": \"MUC-DBL\",\n \"corporateCode\": \"UMBRELLAINC\"\n }\n ]\n}" }, "CreateCompanyRatePlanModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Company ID that can use this rate plan", "type": "string" }, "corporateCode": { "description": "Optional rate plan code that is used by the company. Default is companyCode-ratePlanCode.\r\nSame code can be specified for several rate plans in one company.\r\nNo two companies can have a rate plan with the same code.", "type": "string" } } }, "CreateNoShowPolicyModel": { "required": [ "code", "description", "fee", "name", "propertyId" ], "type": "object", "properties": { "code": { "description": "The code for the no-show policy, used to assemble its id", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the no-show policy", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the no-show policy", "type": "object", "additionalProperties": { "type": "string" } }, "propertyId": { "description": "The id of the property where the no-show policy will be created", "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } }, "example": "{\n \"code\": \"NONREF\",\n \"name\": {\n \"en\": \"No-Show Fee\",\n \"de\": \"No-Show Fee\"\n },\n \"description\": {\n \"en\": \"100% of the accommodation fees, for the complete stay.\",\n \"de\": \"100% of the accommodation fees, for the complete stay.\"\n },\n \"propertyId\": \"MUC\",\n \"fee\": {\n \"vatType\": \"Null\",\n \"fixedValue\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n}" }, "CreatePricingRuleModel": { "required": [ "baseRatePlanId", "type", "value" ], "type": "object", "properties": { "baseRatePlanId": { "description": "The id of the rate plan that will be used as base when calculating the rates.\r\nThe derivation level of the rate plan used as base rate plan cannot be greater than 2", "type": "string" }, "type": { "description": "The type used to control the calculation of the difference to the rates of the defined base\r\nrate plan", "enum": [ "Absolute", "Percent" ], "type": "string" }, "value": { "format": "double", "description": "The value used to control the calculation of the difference to the rates of the defined base\r\nrate plan. It can be a positive and a negative value. The system will prevent you to define\r\na value that would lead to negative rates", "type": "number" } } }, "CreateRatePlanCompanyModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Rate plan ID that is used by this company", "type": "string" }, "corporateCode": { "description": "Optional rate plan code that is used by this company. Default is companyCode-ratePlanCode.\r\nSame code can be specified for several rate plans in one company.\r\nNo two companies can have a rate plan with the same code.", "type": "string" } } }, "CreateRatePlanModel": { "required": [ "cancellationPolicyId", "channelCodes", "code", "description", "minGuaranteeType", "name", "propertyId", "timeSliceDefinitionId", "unitGroupId" ], "type": "object", "properties": { "code": { "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_]*$", "type": "string" }, "propertyId": { "description": "The id of the property for which the rate plan will be created", "type": "string" }, "unitGroupId": { "description": "The id of the unit group offered with this rate plan", "type": "string" }, "cancellationPolicyId": { "description": "The id of the cancellation policy valid for this rate plan", "type": "string" }, "noShowPolicyId": { "description": "The id of the no-show policy valid for this rate plan", "type": "string" }, "channelCodes": { "description": "The channel codes the rate plan is sold through", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, "promoCodes": { "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\r\nanymore and only be offered when one of the promo codes is given in the offer request.\r\nFor backward compatibility it is still not possible to set multiple promo codes.", "type": "array", "items": { "type": "string" } }, "isSubjectToCityTax": { "description": "Whether the rate plan is subject to city tax or not.\r\nDefault value is {true}", "type": "boolean" }, "timeSliceDefinitionId": { "description": "Defines the time periods for which the unit group related to this rate plan is rented out", "type": "string" }, "name": { "description": "The name for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "minGuaranteeType": { "description": "The minimum guarantee to be provided when this rate plan is booked so\r\nthe reservation will be guaranteed to the guest", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "priceCalculationMode": { "description": "The calculation mode is used when calculating the adults' surcharges and derived rates.\r\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of +10%,\r\nwhen Truncate is selected, the result would be 125.99 + 12 = 137.99\r\nWhen Round is selected, the result would be 125.99 + 12.60 = 138.59", "enum": [ "Truncate", "Round" ], "type": "string" }, "bookingPeriods": { "description": "Time periods when the rate plan is bookable", "type": "array", "items": { "$ref": "#/definitions/BookingPeriodModel" } }, "restrictions": { "$ref": "#/definitions/BookingRestrictionsModel" }, "pricingRule": { "$ref": "#/definitions/CreatePricingRuleModel" }, "surcharges": { "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to\r\nthe manually defined or calculated derived rates.\r\nThe values for 'adults' 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.\r\nThe surcharges are required for all possible occupancies defined by the 'MaxPersons' of the unit group.", "type": "array", "items": { "$ref": "#/definitions/SurchargeModel" } }, "ageCategories": { "description": "Additional charges per age category.", "type": "array", "items": { "$ref": "#/definitions/RatePlanAgeCategoryModel" } }, "includedServices": { "description": "Services that are included in the rate plan", "type": "array", "items": { "$ref": "#/definitions/RatePlanServiceModel" } }, "companies": { "description": "Companies that can use this rate plan", "type": "array", "items": { "$ref": "#/definitions/CreateCompanyRatePlanModel" } }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.\r\nThis is a temporary field, avoid using it.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } } }, "example": "{\n \"code\": \"NONREF\",\n \"propertyId\": \"MUC\",\n \"unitGroupId\": \"MUC-DBL\",\n \"cancellationPolicyId\": \"MUC-FLE\",\n \"channelCodes\": [\n \"Direct\",\n \"BookingCom\",\n \"Ibe\"\n ],\n \"promoCodes\": [\n \"APA55100\",\n \"DISCOUNT20\"\n ],\n \"isSubjectToCityTax\": true,\n \"timeSliceDefinitionId\": \"MUC-NIGHT\",\n \"name\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"description\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"minGuaranteeType\": \"PM6Hold\",\n \"priceCalculationMode\": \"Truncate\",\n \"bookingPeriods\": [\n {\n \"from\": \"2022-02-15T13:43:02.4227646+01:00\",\n \"to\": \"2022-03-01T13:43:02.4227646+01:00\"\n },\n {\n \"from\": \"2022-03-04T13:43:02.4227646+01:00\",\n \"to\": \"2022-04-23T13:43:02.4227646+01:00\"\n }\n ],\n \"restrictions\": {\n \"minAdvance\": {\n \"hours\": 12,\n \"days\": 180\n },\n \"maxAdvance\": {\n \"months\": 24\n }\n },\n \"pricingRule\": {\n \"baseRatePlanId\": \"MUC-NONREF-SGL\",\n \"type\": \"Absolute\",\n \"value\": 20.00\n },\n \"surcharges\": [\n {\n \"adults\": 2,\n \"type\": \"Absolute\",\n \"value\": 10.0\n }\n ],\n \"ageCategories\": [\n {\n \"id\": \"MUC-BABY\",\n \"surcharges\": [\n {\n \"adults\": 1,\n \"value\": 20\n }\n ]\n }\n ],\n \"includedServices\": [\n {\n \"serviceId\": \"MUC-BRKF\",\n \"grossPrice\": {\n \"amount\": 10.0,\n \"currency\": \"EUR\"\n }\n }\n ],\n \"companies\": [\n {\n \"id\": \"MUC-APA\",\n \"corporateCode\": \"APA-DBL\"\n }\n ],\n \"accountingConfigs\": [\n {\n \"state\": \"Unknown\",\n \"vatType\": \"Normal\",\n \"serviceType\": \"FoodAndBeverages\",\n \"subAccountId\": \"ALCO\",\n \"validFrom\": \"2021-01-01\"\n }\n ]\n}" }, "CreateServiceModel": { "required": [ "code", "defaultGrossPrice", "description", "name", "postNextDay", "pricingUnit", "propertyId" ], "type": "object", "properties": { "code": { "description": "The code for the service that can be shown in reports and table views", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the service", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the service", "type": "object", "additionalProperties": { "type": "string" } }, "propertyId": { "description": "The id of the property where the item will be created", "type": "string" }, "defaultGrossPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "pricingUnit": { "description": "Defines the granularity for which this item is offered and priced.", "enum": [ "Room", "Person" ], "type": "string" }, "postNextDay": { "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day.", "type": "boolean" }, "availability": { "$ref": "#/definitions/AvailabilityModel" }, "channelCodes": { "description": "The channel codes the service is sold through. When no channels are defined, the service is sold only in a package", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.\r\nThis is a temporary field, avoid using it.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } } }, "example": "{\n \"code\": \"BRK\",\n \"name\": {\n \"en\": \"Breakfast\",\n \"de\": \"Frühstück\"\n },\n \"description\": {\n \"en\": \"Yummy yummy breakfast\",\n \"de\": \"Leckeres Frühstück\"\n },\n \"propertyId\": \"MUC\",\n \"defaultGrossPrice\": {\n \"amount\": 20.0,\n \"currency\": \"EUR\"\n },\n \"pricingUnit\": \"Person\",\n \"postNextDay\": true,\n \"availability\": {\n \"mode\": \"Daily\",\n \"quantity\": 3,\n \"daysOfWeek\": [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n ]\n },\n \"channelCodes\": [\n \"Direct\",\n \"Ibe\",\n \"BookingCom\",\n \"ChannelManager\"\n ],\n \"accountingConfigs\": [\n {\n \"state\": \"Unknown\",\n \"vatType\": \"Normal\",\n \"serviceType\": \"FoodAndBeverages\",\n \"subAccountId\": \"ALCO\",\n \"validFrom\": \"2021-01-01\"\n }\n ]\n}" }, "EmbeddedCancellationPolicyModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The cancellation policy id", "type": "string" }, "code": { "description": "The code for the cancellation policy that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the cancellation policy", "type": "string" }, "description": { "description": "The description for the cancellation policy", "type": "string" }, "periodPriorToArrival": { "$ref": "#/definitions/PeriodModel" } } }, "EmbeddedNoShowPolicyModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The no-show policy id", "type": "string" }, "code": { "description": "The code for the no-show policy that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the no-show policy", "type": "string" }, "description": { "description": "The description for the no-show policy", "type": "string" } } }, "EmbeddedRatePlanModel": { "required": [ "id", "isSubjectToCityTax" ], "type": "object", "properties": { "id": { "description": "The rate plan id", "type": "string" }, "code": { "description": "The code for the rate plan that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the rate plan", "type": "string" }, "description": { "description": "The description for the rate plan", "type": "string" }, "isSubjectToCityTax": { "description": "Whether the rate plan is subject to city tax or not", "type": "boolean" } } }, "EmbeddedServiceModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The service id", "type": "string" }, "code": { "description": "The code for the service", "type": "string" }, "name": { "description": "The name for the service", "type": "string" }, "description": { "description": "The description for the service", "type": "string" } } }, "EmbeddedTimeSliceDefinitionModel": { "required": [ "checkInTime", "checkOutTime", "id", "name", "template" ], "type": "object", "properties": { "id": { "description": "The time slice definition id", "type": "string" }, "name": { "description": "The name for the time slice definition", "type": "string" }, "template": { "description": "The template used by the time slice defintion", "enum": [ "DayUse", "OverNight" ], "type": "string" }, "checkInTime": { "description": "The check-in time for reservations based on this rate plan
A time (without fractional second part) as defined in the ISO8601:2004", "type": "string" }, "checkOutTime": { "description": "The check-out time for reservations based on this rate plan
A time (without fractional second part) as defined in the ISO8601:2004", "type": "string" } } }, "FeeDetailsModel": { "required": [ "vatType" ], "type": "object", "properties": { "vatType": { "description": "VAT that applies for the fee", "enum": [ "Null", "VeryReduced", "Reduced", "Normal", "Without", "Special", "ReducedCovid19", "NormalCovid19" ], "type": "string" }, "fixedValue": { "$ref": "#/definitions/MonetaryValueModel" }, "percentValue": { "$ref": "#/definitions/PercentValueModel" } } }, "MonetaryValueModel": { "required": [ "amount", "currency" ], "type": "object", "properties": { "amount": { "format": "double", "type": "number" }, "currency": { "type": "string" } } }, "NoShowPolicyCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The no-show policy ID", "type": "string" } }, "example": "{\n \"id\": \"MUC-NONREF\"\n}" }, "NoShowPolicyItemModel": { "required": [ "code", "description", "fee", "id", "name", "propertyId" ], "type": "object", "properties": { "id": { "description": "The no-show policy id", "type": "string" }, "code": { "description": "The code for the policy", "type": "string" }, "name": { "description": "The name for the no-show policy", "type": "string" }, "description": { "description": "The description for the no-show policy", "type": "string" }, "propertyId": { "description": "The id of the property where the no-show policy was created", "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } } }, "NoShowPolicyListModel": { "required": [ "count", "noShowPolicies" ], "type": "object", "properties": { "noShowPolicies": { "description": "List of no-show policies", "type": "array", "items": { "$ref": "#/definitions/NoShowPolicyItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"noShowPolicies\": [\n {\n \"id\": \"MUC-FLEX\",\n \"code\": \"FLEX\",\n \"name\": \"No-Show Fee\",\n \"description\": \"100 Euro of the accommodation fees, for the complete stay. Reduced VAT applies.\",\n \"propertyId\": \"MUC\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"fixedValue\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n },\n {\n \"id\": \"BER-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"No-Show Fee\",\n \"description\": \"100% of the accommodation fees, for the complete stay. Reduced VAT applies.\",\n \"propertyId\": \"BER\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"percentValue\": {\n \"percent\": 100,\n \"limit\": 1,\n \"includeServiceIds\": [\n \"MUC-BRK\"\n ]\n }\n }\n }\n ],\n \"count\": 2\n}" }, "NoShowPolicyModel": { "required": [ "code", "description", "fee", "id", "name", "propertyId" ], "type": "object", "properties": { "id": { "description": "The no-show policy id", "type": "string" }, "code": { "description": "The code for the policy", "maxLength": 10, "minLength": 3, "pattern": "^[a-zA-Z0-9_]*$", "type": "string" }, "name": { "description": "The name for the no-show policy", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the no-show policy", "type": "object", "additionalProperties": { "type": "string" } }, "propertyId": { "description": "The id of the property where the no-show policy was created", "type": "string" }, "fee": { "$ref": "#/definitions/FeeDetailsModel" } }, "example": "{\n \"id\": \"MUC-NOSHOW\",\n \"code\": \"NOSHOW\",\n \"name\": {\n \"en\": \"No-Show Fee\",\n \"de\": \"No-Show Fee\"\n },\n \"description\": {\n \"en\": \"100% of the accommodation fees, for the complete stay. Reduced VAT applies.\",\n \"de\": \"100% of the accommodation fees, for the complete stay. Reduced VAT applies.\"\n },\n \"propertyId\": \"MUC\",\n \"fee\": {\n \"vatType\": \"Reduced\",\n \"percentValue\": {\n \"percent\": 100,\n \"limit\": 1,\n \"includeServiceIds\": [\n \"MUC-BRK\"\n ]\n }\n }\n}" }, "PercentValueModel": { "required": [ "percent" ], "type": "object", "properties": { "percent": { "format": "int32", "description": "Percent to take from the base. Must be between 0 and 100.", "maximum": 100, "minimum": 0, "type": "integer" }, "limit": { "format": "int32", "description": "If set, limits the calculation base to the specified number of time slices, starting from the beginning.
\r\nIf not set, the entire stay will be used as a base.", "type": "integer" }, "includeServiceIds": { "description": "Services included in the calculation base. If none are set, only charges for the unit will be used.
\r\nThe services are only included, if they are part of the rate plan. Extra services are ignored.", "type": "array", "items": { "type": "string" } } } }, "PeriodModel": { "type": "object", "properties": { "hours": { "format": "int64", "description": "The number of hours within the period", "type": "integer" }, "days": { "format": "int32", "description": "The number of days within the period", "type": "integer" }, "months": { "format": "int32", "description": "The number of months within the period", "type": "integer" } } }, "PricingRuleModel": { "required": [ "baseRatePlan", "type", "value" ], "type": "object", "properties": { "baseRatePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "type": { "description": "The type used to control the calculation of the difference to the rates of the defined base\r\nrate plan", "enum": [ "Absolute", "Percent" ], "type": "string" }, "value": { "format": "double", "description": "The value used to control the calculation of the difference to the rates of the defined base\r\nrate plan. It can be a positive and a negative value", "type": "number" } } }, "PromoCodeListModel": { "required": [ "count", "promoCodes" ], "type": "object", "properties": { "promoCodes": { "description": "List of existing promo codes", "type": "array", "items": { "$ref": "#/definitions/PromoCodeModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"promoCodes\": [\n {\n \"code\": \"APALEO\",\n \"relatedRateplanIds\": [\n \"BER-APALEO_FREE-SGL\",\n \"BER-APALEO_FREE-DBL\",\n \"MUC-APALEO_KING-SUITE\"\n ]\n }\n ],\n \"count\": 5\n}" }, "PromoCodeModel": { "required": [ "code", "relatedRateplanIds" ], "type": "object", "properties": { "code": { "description": "The code of special rate or discount\r\nor agreement between the hotel and an organization", "type": "string" }, "relatedRateplanIds": { "description": "All rate plan IDs having this code", "type": "array", "items": { "type": "string" } } } }, "RateItemModel": { "required": [ "from", "to" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "Date and time the rate begins
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "Date and time the rate ends
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "price": { "$ref": "#/definitions/MonetaryValueModel" }, "includedServicesPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "calculatedPrices": { "description": "A list of prices for occupancies 2 or higher. Only set, if the rate plan defines surcharges for different occupancies", "type": "array", "items": { "$ref": "#/definitions/CalculatedRateModel" } }, "restrictions": { "$ref": "#/definitions/RateRestrictionsModel" } } }, "RateListModel": { "required": [ "count", "rates" ], "type": "object", "properties": { "rates": { "description": "List of rates", "type": "array", "items": { "$ref": "#/definitions/RateItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"rates\": [\n {\n \"from\": \"2022-02-22T17:00:00+01:00\",\n \"to\": \"2022-02-23T11:00:00+01:00\",\n \"price\": {\n \"amount\": 123.0,\n \"currency\": \"EUR\"\n },\n \"calculatedPrices\": [\n {\n \"adults\": 2,\n \"price\": {\n \"amount\": 133.0,\n \"currency\": \"EUR\"\n }\n }\n ],\n \"restrictions\": {\n \"minLengthOfStay\": 2,\n \"maxLengthOfStay\": 30,\n \"closed\": false,\n \"closedOnArrival\": true,\n \"closedOnDeparture\": true\n }\n }\n ],\n \"count\": 0\n}" }, "RatePlanAgeCategoryModel": { "required": [ "id", "surcharges" ], "type": "object", "properties": { "id": { "description": "The id of the age category", "type": "string" }, "surcharges": { "description": "Additional charges for the current age category. The absolute value will be added to the manually defined or calculated derived rates.\r\nThe values for 'adults' must be unique within the list, and starting from 1. Values equal or higher than\r\nthe maximum unit group occupancy will be silently ignored.", "type": "array", "items": { "$ref": "#/definitions/AgeCategorySurchargeModel" } } } }, "RatePlanCodeListModel": { "required": [ "count", "ratePlanCodes" ], "type": "object", "properties": { "ratePlanCodes": { "description": "List of existing rate plan codes", "type": "array", "items": { "$ref": "#/definitions/RatePlanCodeModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"ratePlanCodes\": [\n {\n \"code\": \"NONREF\"\n }\n ],\n \"count\": 1\n}" }, "RatePlanCodeModel": { "required": [ "code" ], "type": "object", "properties": { "code": { "description": "The rate plan code", "type": "string" } } }, "RatePlanCompanyModel": { "required": [ "code", "id", "name" ], "type": "object", "properties": { "id": { "description": "Rate plan ID that is used by this company", "type": "string" }, "code": { "description": "Rate plan code that is used by this company", "type": "string" }, "corporateCode": { "description": "Company rate plan code, identifying the company + rate plan pair. Is used is offers.", "type": "string" }, "name": { "description": "The name of the rate plan", "type": "string" } } }, "RatePlanCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The rate plan id", "type": "string" } }, "example": "{\n \"id\": \"MUC-NONREF-DBL\"\n}" }, "RatePlanItemModel": { "required": [ "accountingConfigs", "cancellationPolicy", "channelCodes", "code", "derivationLevel", "description", "id", "isBookable", "isDerived", "isSubjectToCityTax", "minGuaranteeType", "name", "noShowPolicy", "property", "timeSliceDefinition", "unitGroup" ], "type": "object", "properties": { "id": { "description": "The rate plan id", "type": "string" }, "code": { "description": "The code for the rate plan that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the rate plan", "type": "string" }, "description": { "description": "The description for the rate plan", "type": "string" }, "minGuaranteeType": { "description": "The minimum guarantee to be provided when this rate plan is booked so\r\nthe reservation will be guaranteed to the guest", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "priceCalculationMode": { "description": "The calculation mode is used when calculating the adults' surcharges and derived rates.\r\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of +10%,\r\nwhen Truncate is selected, the result would be 125.99 + 12 = 137.99\r\nWhen Round is selected, the result would be 125.99 + 12.60 = 138.59", "enum": [ "Truncate", "Round" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "cancellationPolicy": { "$ref": "#/definitions/EmbeddedCancellationPolicyModel" }, "noShowPolicy": { "$ref": "#/definitions/EmbeddedNoShowPolicyModel" }, "channelCodes": { "description": "The channel codes the rate plan is sold through", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, "promoCodes": { "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\r\nanymore and only be offered when one of the promo codes is given in the offer request.\r\nFor backward compatibility it is still not possible to set multiple promo codes.", "type": "array", "items": { "type": "string" } }, "timeSliceDefinition": { "$ref": "#/definitions/EmbeddedTimeSliceDefinitionModel" }, "restrictions": { "$ref": "#/definitions/BookingRestrictionsModel" }, "bookingPeriods": { "description": "Time periods when the rate plan is bookable", "type": "array", "items": { "$ref": "#/definitions/BookingPeriodModel" } }, "isBookable": { "description": "Indicates whether the rate plan has an active booking period", "type": "boolean" }, "isSubjectToCityTax": { "description": "Whether the rate plan is subject to city tax or not", "type": "boolean" }, "pricingRule": { "$ref": "#/definitions/PricingRuleModel" }, "isDerived": { "description": "Indicates whether the rates for this rate plan are derived from another rate plan", "type": "boolean" }, "derivationLevel": { "format": "int32", "description": "Indicates the derivation level of the rate plan. When zero, it is a rate plan with manually managed prices.", "type": "integer" }, "surcharges": { "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.", "type": "array", "items": { "$ref": "#/definitions/SurchargeModel" } }, "ageCategories": { "description": "Additional charges per age category.", "type": "array", "items": { "$ref": "#/definitions/RatePlanAgeCategoryModel" } }, "includedServices": { "description": "Services that are included in the rate plan", "type": "array", "items": { "$ref": "#/definitions/RatePlanServiceItemModel" } }, "companies": { "description": "Companies that can use this rate plan", "type": "array", "items": { "$ref": "#/definitions/CompanyRatePlanModel" } }, "ratesRange": { "$ref": "#/definitions/RatesRangeModel" }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } } } }, "RatePlanListModel": { "required": [ "count", "ratePlans" ], "type": "object", "properties": { "ratePlans": { "description": "List of rate plans", "type": "array", "items": { "$ref": "#/definitions/RatePlanItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"ratePlans\": [\n {\n \"id\": \"MUC-NONREF-DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"minGuaranteeType\": \"PM6Hold\",\n \"priceCalculationMode\": \"Truncate\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"cancellationPolicy\": {\n \"id\": \"MUC-FLE\",\n \"code\": \"FLE\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation until 36 hours before arrival.\"\n },\n \"noShowPolicy\": {\n \"id\": \"MUC-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\"\n },\n \"channelCodes\": [\n \"Direct\",\n \"BookingCom\",\n \"Ibe\"\n ],\n \"promoCodes\": [\n \"APA55100\"\n ],\n \"timeSliceDefinition\": {\n \"id\": \"MUC-NIGHT\",\n \"name\": \"Over Night\",\n \"template\": \"OverNight\",\n \"checkInTime\": \"17:00:00\",\n \"checkOutTime\": \"10:00:00\"\n },\n \"isBookable\": false,\n \"isSubjectToCityTax\": false,\n \"isDerived\": false,\n \"derivationLevel\": 0,\n \"ratesRange\": {\n \"from\": \"2022-03-04\",\n \"to\": \"2022-03-14\"\n }\n },\n {\n \"id\": \"MUC-FLEX-DBL\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Flexible\",\n \"minGuaranteeType\": \"PM6Hold\",\n \"priceCalculationMode\": \"Round\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"cancellationPolicy\": {\n \"id\": \"MUC-FLE\",\n \"code\": \"FLE\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation until 36 hours before arrival.\"\n },\n \"noShowPolicy\": {\n \"id\": \"MUC-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\"\n },\n \"channelCodes\": [\n \"Direct\",\n \"BookingCom\",\n \"Ibe\"\n ],\n \"timeSliceDefinition\": {\n \"id\": \"MUC-NIGHT\",\n \"name\": \"Over Night\",\n \"template\": \"OverNight\",\n \"checkInTime\": \"17:00:00\",\n \"checkOutTime\": \"10:00:00\"\n },\n \"isBookable\": false,\n \"isSubjectToCityTax\": false,\n \"isDerived\": false,\n \"derivationLevel\": 0\n }\n ],\n \"count\": 0\n}" }, "RatePlanModel": { "required": [ "accountingConfigs", "cancellationPolicy", "channelCodes", "code", "derivationLevel", "description", "id", "isBookable", "isDerived", "isSubjectToCityTax", "minGuaranteeType", "name", "noShowPolicy", "property", "timeSliceDefinition", "unitGroup" ], "type": "object", "properties": { "id": { "description": "The rate plan id", "type": "string" }, "code": { "description": "The code for the rate plan that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "minGuaranteeType": { "description": "The minimum guarantee to be provided when this rate plan is booked so\r\nthe reservation will be guaranteed to the guest", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "priceCalculationMode": { "description": "The calculation mode is used when calculating the adults' surcharges and derived rates.\r\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of +10%,\r\nwhen Truncate is selected, the result would be 125.99 + 12 = 137.99\r\nWhen Round is selected, the result would be 125.99 + 12.60 = 138.59", "enum": [ "Truncate", "Round" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "cancellationPolicy": { "$ref": "#/definitions/EmbeddedCancellationPolicyModel" }, "noShowPolicy": { "$ref": "#/definitions/EmbeddedNoShowPolicyModel" }, "channelCodes": { "description": "The channel codes the rate plan is sold through", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } }, "promoCodes": { "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\r\nanymore and only be offered when one of the promo codes is given in the offer request.\r\nFor backward compatibility it is still not possible to set multiple promo codes.", "type": "array", "items": { "type": "string" } }, "timeSliceDefinition": { "$ref": "#/definitions/EmbeddedTimeSliceDefinitionModel" }, "restrictions": { "$ref": "#/definitions/BookingRestrictionsModel" }, "bookingPeriods": { "description": "Time periods when the rate plan is bookable", "type": "array", "items": { "$ref": "#/definitions/BookingPeriodModel" } }, "isBookable": { "description": "Indicates whether the rate plan has an active booking period", "type": "boolean" }, "isSubjectToCityTax": { "description": "Whether the rate plan is subject to city tax or not.\r\nDefault value is {true}", "type": "boolean" }, "pricingRule": { "$ref": "#/definitions/PricingRuleModel" }, "isDerived": { "description": "Indicates whether the rates for this rate plan are derived from another rate plan", "type": "boolean" }, "derivationLevel": { "format": "int32", "description": "Indicates the derivation level of the rate plan. When zero, it is a rate plan with manually managed prices.", "type": "integer" }, "surcharges": { "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.", "type": "array", "items": { "$ref": "#/definitions/SurchargeModel" } }, "ageCategories": { "description": "Additional charges per age category.", "type": "array", "items": { "$ref": "#/definitions/RatePlanAgeCategoryModel" } }, "includedServices": { "description": "Services that are included in the rate plan", "type": "array", "items": { "$ref": "#/definitions/RatePlanServiceModel" } }, "companies": { "description": "Companies that can use this rate plan", "type": "array", "items": { "$ref": "#/definitions/CompanyRatePlanModel" } }, "ratesRange": { "$ref": "#/definitions/RatesRangeModel" } }, "example": "{\n \"id\": \"MUC-NONREF-DBL\",\n \"code\": \"NONREF\",\n \"name\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"description\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"minGuaranteeType\": \"PM6Hold\",\n \"priceCalculationMode\": \"Truncate\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"cancellationPolicy\": {\n \"id\": \"MUC-FLE\",\n \"code\": \"FLE\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation until 36 hours before arrival.\"\n },\n \"noShowPolicy\": {\n \"id\": \"MUC-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\"\n },\n \"channelCodes\": [\n \"Direct\",\n \"BookingCom\",\n \"Ibe\"\n ],\n \"accountingConfigs\": [\n {\n \"state\": \"Unknown\",\n \"vatType\": \"Normal\",\n \"serviceType\": \"FoodAndBeverages\",\n \"subAccountId\": \"ALCO\",\n \"validFrom\": \"2021-01-01\"\n }\n ],\n \"promoCodes\": [\n \"APA55100\",\n \"DISCOUNT20\"\n ],\n \"timeSliceDefinition\": {\n \"id\": \"MUC-NIGHT\",\n \"name\": \"Over Night\",\n \"template\": \"OverNight\",\n \"checkInTime\": \"17:00:00\",\n \"checkOutTime\": \"10:00:00\"\n },\n \"restrictions\": {\n \"minAdvance\": {\n \"hours\": 12,\n \"days\": 180\n },\n \"maxAdvance\": {\n \"months\": 24\n }\n },\n \"bookingPeriods\": [\n {\n \"from\": \"2022-02-15T13:43:02.4227646+01:00\",\n \"to\": \"2022-03-01T13:43:02.4227646+01:00\"\n },\n {\n \"from\": \"2022-03-04T13:43:02.4227646+01:00\",\n \"to\": \"2022-04-23T13:43:02.4227646+01:00\"\n }\n ],\n \"isBookable\": false,\n \"pricingRule\": {\n \"baseRatePlan\": {\n \"id\": \"MUC-NONREF_SGL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"type\": \"Absolute\",\n \"value\": 20.00\n },\n \"isDerived\": true,\n \"derivationLevel\": 1,\n \"surcharges\": [\n {\n \"adults\": 2,\n \"type\": \"Absolute\",\n \"value\": 10.0\n }\n ],\n \"ageCategories\": [\n {\n \"id\": \"MUC-BABY\",\n \"surcharges\": [\n {\n \"adults\": 1,\n \"value\": 20\n }\n ]\n }\n ],\n \"includedServices\": [\n {\n \"serviceId\": \"MUC-WLAN\",\n \"grossPrice\": {\n \"amount\": 5.0,\n \"currency\": \"EUR\"\n }\n }\n ],\n \"companies\": [\n {\n \"id\": \"MUC-APA\",\n \"code\": \"APA\",\n \"corporateCode\": \"APA-DBL\",\n \"name\": \"apaleo\"\n }\n ],\n \"ratesRange\": {\n \"from\": \"2022-03-14\",\n \"to\": \"2022-04-03\"\n }\n}" }, "RatePlanServiceItemModel": { "required": [ "grossPrice", "pricingMode", "service" ], "type": "object", "properties": { "service": { "$ref": "#/definitions/EmbeddedServiceModel" }, "grossPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "pricingMode": { "description": "Whether the service price is included in or added to the base rate. The property defaults to `Included`.", "enum": [ "Included", "Additional" ], "type": "string" } } }, "RatePlanServiceModel": { "required": [ "grossPrice", "serviceId" ], "type": "object", "properties": { "serviceId": { "description": "Service id to be included in the rate plan", "type": "string" }, "grossPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "pricingMode": { "description": "Whether the service price is included in or added to the base rate. The property defaults to `Included`.", "enum": [ "Included", "Additional" ], "type": "string" } } }, "RateRestrictionsModel": { "required": [ "closed", "closedOnArrival", "closedOnDeparture" ], "type": "object", "properties": { "minLengthOfStay": { "format": "int32", "description": "The minimum length of stay in order to book the rate. If at least this number\r\nof time slices are covered by the stay duration the rate will be offered.", "maximum": 2147483647, "minimum": 1, "type": "integer" }, "maxLengthOfStay": { "format": "int32", "description": "The maximum length of stay in order to book the rate. If not more than this number\r\nof time slices are covered by the stay duration the rate will be offered.", "maximum": 2147483647, "minimum": 1, "type": "integer" }, "closed": { "description": "Whether the rate can be booked for a stay-through reservation", "type": "boolean" }, "closedOnArrival": { "description": "Whether the rate can be booked on the reservation's arrival date", "type": "boolean" }, "closedOnDeparture": { "description": "Whether the rate can be booked on the reservation's departure date", "type": "boolean" } } }, "RatesRangeModel": { "required": [ "from", "to" ], "type": "object", "properties": { "from": { "format": "date", "description": "The first date when the rate plan has rates set", "type": "string", "example": "2020-10-10" }, "to": { "format": "date", "description": "The last date when the rate plan has rates set", "type": "string", "example": "2020-10-10" } } }, "ReplaceCompanyRatePlanModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Company ID that can use this rate plan", "type": "string" }, "corporateCode": { "description": "Optional rate plan code that is used by the company. Default is companyCode-ratePlanCode.\r\nSame code can be specified for several rate plans in one company.\r\nNo two companies can have a rate plan with the same code.", "type": "string" } } }, "ReplaceRateListModel": { "required": [ "rates" ], "type": "object", "properties": { "rates": { "description": "List of rates", "type": "array", "items": { "$ref": "#/definitions/ReplaceRateModel" } } }, "example": "[\n {\n \"from\": \"2022-02-22T17:00:00+01:00\",\n \"to\": \"2022-02-23T11:00:00+01:00\",\n \"price\": {\n \"amount\": 123.50,\n \"currency\": \"EUR\"\n },\n \"restrictions\": {\n \"minLengthOfStay\": 1,\n \"maxLengthOfStay\": 30,\n \"closed\": false,\n \"closedOnArrival\": true,\n \"closedOnDeparture\": true\n }\n }\n]" }, "ReplaceRateModel": { "required": [ "from", "to" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "Date and time the rate begins
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "Date and time the rate ends
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "price": { "$ref": "#/definitions/MonetaryValueModel" }, "restrictions": { "$ref": "#/definitions/RateRestrictionsModel" } }, "example": "{\n \"from\": \"2022-02-22T17:00:00+01:00\",\n \"to\": \"2022-02-23T11:00:00+01:00\",\n \"price\": {\n \"amount\": 123.50,\n \"currency\": \"EUR\"\n },\n \"restrictions\": {\n \"minLengthOfStay\": 1,\n \"maxLengthOfStay\": 30,\n \"closed\": false,\n \"closedOnArrival\": true,\n \"closedOnDeparture\": true\n }\n}" }, "ReplaceRatePlanModel": { "required": [ "cancellationPolicyId", "channelCodes", "description", "minGuaranteeType", "name" ], "type": "object", "properties": { "name": { "description": "The name for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the rate plan", "type": "object", "additionalProperties": { "type": "string" } }, "minGuaranteeType": { "description": "The minimum guarantee to be provided when this rate plan is booked so\r\nthe reservation will be guaranteed to the guest", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "priceCalculationMode": { "description": "The calculation mode is used when calculating the adults' surcharges and derived rates.\r\nDefaults to Truncate. Example: for a rate of 125.99 and a surcharge of +10%,\r\nwhen Truncate is selected, the result would be 125.99 + 12 = 137.99\r\nWhen Round is selected, the result would be 125.99 + 12.60 = 138.59", "enum": [ "Truncate", "Round" ], "type": "string" }, "channelCodes": { "description": "The channel codes the rate plan is sold through", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } }, "promoCodes": { "description": "The rate codes for promotional and hidden rates. If at least one code is set the rate will be not publicly visible\r\nanymore and only be offered when one of the promo codes is given in the offer request.\r\nFor backward compatibility it is still not possible to set multiple promo codes.", "type": "array", "items": { "type": "string" } }, "isSubjectToCityTax": { "description": "Whether the rate plan is subject to city tax or not.\r\nDefault value is {true}", "type": "boolean" }, "cancellationPolicyId": { "description": "The id of the cancellation policy valid for this rate plan", "type": "string" }, "noShowPolicyId": { "description": "The id of the no-show policy valid for this rate plan", "type": "string" }, "bookingPeriods": { "description": "Time periods when the rate plan is bookable", "type": "array", "items": { "$ref": "#/definitions/BookingPeriodModel" } }, "restrictions": { "$ref": "#/definitions/BookingRestrictionsModel" }, "includedServices": { "description": "Services that are included in the rate plan", "type": "array", "items": { "$ref": "#/definitions/RatePlanServiceModel" } }, "companies": { "description": "Companies that can use this rate plan", "type": "array", "items": { "$ref": "#/definitions/ReplaceCompanyRatePlanModel" } }, "pricingRule": { "$ref": "#/definitions/CreatePricingRuleModel" }, "surcharges": { "description": "Additional charges for more than single occupancy. The percent or absolute value will be added to the manually defined or calculated derived rates.\r\nThe values for 'adults' 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.\r\nThe surcharges are required for all possible occupancies defined by the 'MaxPersons' of the unit group.", "type": "array", "items": { "$ref": "#/definitions/SurchargeModel" } }, "ageCategories": { "description": "Additional charges per age category.", "type": "array", "items": { "$ref": "#/definitions/RatePlanAgeCategoryModel" } }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } } }, "example": "{\n \"name\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"description\": {\n \"de\": \"Nicht Stornierbar\",\n \"en\": \"Non Refundable\"\n },\n \"minGuaranteeType\": \"PM6Hold\",\n \"priceCalculationMode\": \"Truncate\",\n \"channelCodes\": [\n \"Direct\",\n \"BookingCom\",\n \"Ibe\"\n ],\n \"cancellationPolicyId\": \"MUC-NONREF\",\n \"bookingPeriods\": [\n {\n \"from\": \"2022-02-15T13:43:02.4227646+01:00\",\n \"to\": \"2022-03-01T13:43:02.4227646+01:00\"\n },\n {\n \"from\": \"2022-03-04T13:43:02.4227646+01:00\",\n \"to\": \"2022-04-23T13:43:02.4227646+01:00\"\n }\n ],\n \"restrictions\": {\n \"minAdvance\": {\n \"hours\": 12,\n \"days\": 180\n },\n \"maxAdvance\": {\n \"months\": 24\n }\n },\n \"includedServices\": [\n {\n \"serviceId\": \"MUC-BRKF\",\n \"grossPrice\": {\n \"amount\": 10.0,\n \"currency\": \"EUR\"\n }\n },\n {\n \"serviceId\": \"MUC-WLAN\",\n \"grossPrice\": {\n \"amount\": 5.0,\n \"currency\": \"EUR\"\n }\n }\n ],\n \"companies\": [\n {\n \"id\": \"MUC-APA\",\n \"corporateCode\": \"APA-DBL\"\n }\n ],\n \"pricingRule\": {\n \"baseRatePlanId\": \"MUC-NONREF-SGL\",\n \"type\": \"Absolute\",\n \"value\": 20.00\n },\n \"surcharges\": [\n {\n \"adults\": 2,\n \"type\": \"Percent\",\n \"value\": 10.0\n }\n ],\n \"ageCategories\": [\n {\n \"id\": \"MUC-BABY\",\n \"surcharges\": [\n {\n \"adults\": 1,\n \"value\": 10\n }\n ]\n },\n {\n \"id\": \"MUC-CHILD\",\n \"surcharges\": [\n {\n \"adults\": 1,\n \"value\": 40\n }\n ]\n }\n ]\n}" }, "ServiceCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "The item id", "type": "string" } }, "example": "{\n \"id\": \"MUC-BRKF\"\n}" }, "ServiceItemModel": { "required": [ "availability", "code", "defaultGrossPrice", "description", "id", "name", "postNextDay", "property", "serviceType", "vatType" ], "type": "object", "properties": { "id": { "description": "Id", "type": "string" }, "name": { "description": "Name", "type": "string" }, "code": { "description": "The code for the service", "type": "string" }, "description": { "description": "Description", "type": "string" }, "defaultGrossPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "pricingUnit": { "description": "Defines per which unit (flat, room, person) this item is offered and priced", "enum": [ "Room", "Person" ], "type": "string" }, "postNextDay": { "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day.", "type": "boolean" }, "serviceType": { "description": "The service type, used by accounting to determine the correct revenue account", "enum": [ "Other", "Accommodation", "FoodAndBeverages" ], "type": "string" }, "vatType": { "description": "The vat type, used by accounting to determine the correct vat amount and account", "enum": [ "Null", "VeryReduced", "Reduced", "Normal", "Without", "Special", "ReducedCovid19", "NormalCovid19" ], "type": "string" }, "availability": { "$ref": "#/definitions/AvailabilityModel" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "subAccountId": { "description": "ID of the custom sub-account, used by accounting to determine the correct revenue account", "type": "string" }, "channelCodes": { "description": "The channel codes the service is sold through", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } } } }, "ServiceListModel": { "required": [ "count", "services" ], "type": "object", "properties": { "services": { "description": "List of packages", "type": "array", "items": { "$ref": "#/definitions/ServiceItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"services\": [\n {\n \"id\": \"MUC-WIFI\",\n \"name\": \"High Speed Wifi\",\n \"code\": \"WIFI\",\n \"description\": \"High speed wifi access for 24 hours, up to four devices.\",\n \"defaultGrossPrice\": {\n \"amount\": 10.0,\n \"currency\": \"EUR\"\n },\n \"pricingUnit\": \"Room\",\n \"postNextDay\": false,\n \"serviceType\": \"Other\",\n \"vatType\": \"Normal\",\n \"availability\": {\n \"mode\": \"Daily\",\n \"daysOfWeek\": [\n \"Saturday\",\n \"Sunday\"\n ]\n },\n \"subAccountId\": \"MUC-WF\",\n \"channelCodes\": [\n \"Direct\"\n ]\n },\n {\n \"id\": \"MUC-BRKF\",\n \"name\": \"Breakfast\",\n \"code\": \"BRK\",\n \"description\": \"Yummy yummy breakfast.\",\n \"defaultGrossPrice\": {\n \"amount\": 20.0,\n \"currency\": \"EUR\"\n },\n \"pricingUnit\": \"Person\",\n \"postNextDay\": false,\n \"serviceType\": \"FoodAndBeverages\",\n \"vatType\": \"Normal\",\n \"availability\": {\n \"mode\": \"Daily\",\n \"quantity\": 7,\n \"daysOfWeek\": [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\"\n ]\n },\n \"channelCodes\": [\n \"Direct\",\n \"Ibe\",\n \"BookingCom\",\n \"ChannelManager\"\n ]\n }\n ],\n \"count\": 0\n}" }, "ServiceModel": { "required": [ "accountingConfigs", "availability", "code", "defaultGrossPrice", "description", "id", "name", "postNextDay", "pricingUnit", "property" ], "type": "object", "properties": { "id": { "description": "The service id", "type": "string" }, "code": { "description": "The code for the service", "type": "string" }, "name": { "description": "The name for the service", "type": "object", "additionalProperties": { "type": "string" } }, "description": { "description": "The description for the service", "type": "object", "additionalProperties": { "type": "string" } }, "defaultGrossPrice": { "$ref": "#/definitions/MonetaryValueModel" }, "pricingUnit": { "description": "Defines the granularity (room, person) for which this item is offered and priced", "enum": [ "Room", "Person" ], "type": "string" }, "postNextDay": { "description": "Whether the service is delivered and posted on the same business date as the accommodation, or on the next day.", "type": "boolean" }, "availability": { "$ref": "#/definitions/AvailabilityModel" }, "accountingConfigs": { "description": "The collection of accounting configs with validity periods.", "type": "array", "items": { "$ref": "#/definitions/AccountingConfigModel" } }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "channelCodes": { "description": "The channel codes the service is sold through. When no channels are defined, the service is sold only in a package", "type": "array", "items": { "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" } } }, "example": "{\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRK\",\n \"name\": {\n \"en\": \"Breakfast\",\n \"de\": \"Frühstück\"\n },\n \"description\": {\n \"en\": \"Yummy yummy breakfast\",\n \"de\": \"Leckeres Frühstück\"\n },\n \"defaultGrossPrice\": {\n \"amount\": 20.0,\n \"currency\": \"EUR\"\n },\n \"pricingUnit\": \"Person\",\n \"postNextDay\": true,\n \"availability\": {\n \"mode\": \"Daily\",\n \"quantity\": 3,\n \"daysOfWeek\": [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n ]\n },\n \"accountingConfigs\": [\n {\n \"state\": \"Unknown\",\n \"vatType\": \"Normal\",\n \"serviceType\": \"FoodAndBeverages\",\n \"subAccountId\": \"ALCO\",\n \"validFrom\": \"2021-01-01\"\n }\n ],\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"channelCodes\": [\n \"Direct\",\n \"Ibe\",\n \"BookingCom\",\n \"ChannelManager\"\n ]\n}" }, "SurchargeModel": { "required": [ "adults", "type", "value" ], "type": "object", "properties": { "adults": { "format": "int32", "description": "The total numbers of adults", "type": "integer" }, "type": { "description": "Specifies how to interpret 'Value'", "enum": [ "Absolute", "Percent" ], "type": "string" }, "value": { "format": "double", "description": "The percent or absolute value (in the rate plan's currency) of the surcharge", "type": "number" } } }, "ActionModel[BlockAction,NotAllowedBlockActionReason]": { "required": [ "action", "isAllowed" ], "type": "object", "properties": { "action": { "enum": [ "Delete", "Confirm", "Release", "Cancel", "Pickup", "Modify", "Wash" ], "type": "string" }, "isAllowed": { "type": "boolean" }, "reasons": { "type": "array", "items": { "$ref": "#/definitions/ActionReasonModel[NotAllowedBlockActionReason]" } } } }, "ActionModel[GroupAction,NotAllowedGroupActionReason]": { "required": [ "action", "isAllowed" ], "type": "object", "properties": { "action": { "enum": [ "Delete" ], "type": "string" }, "isAllowed": { "type": "boolean" }, "reasons": { "type": "array", "items": { "$ref": "#/definitions/ActionReasonModel[NotAllowedGroupActionReason]" } } } }, "ActionModel[ReservationAction,NotAllowedReservationActionReason]": { "required": [ "action", "isAllowed" ], "type": "object", "properties": { "action": { "enum": [ "CheckIn", "CheckOut", "Cancel", "AmendTimeSlices", "AmendArrival", "AmendDeparture", "NoShow", "AssignUnit", "UnassignUnit", "RemoveCityTax", "AddCityTax", "RemoveService" ], "type": "string" }, "isAllowed": { "type": "boolean" }, "reasons": { "type": "array", "items": { "$ref": "#/definitions/ActionReasonModel[NotAllowedReservationActionReason]" } } } }, "ActionModel[ReservationTimeSliceAction,NotAllowedReservationTimeSliceActionReason]": { "required": [ "action", "isAllowed" ], "type": "object", "properties": { "action": { "enum": [ "Amend" ], "type": "string" }, "isAllowed": { "type": "boolean" }, "reasons": { "type": "array", "items": { "$ref": "#/definitions/ActionReasonModel[NotAllowedReservationTimeSliceActionReason]" } } } }, "ActionReasonModel[NotAllowedBlockActionReason]": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "enum": [ "DeleteNotAllowedForBlockWithReservations", "ReleaseNotAllowedForBlockWithReservations", "ReleaseNotAllowedForBlockInThePast", "ReleaseNotAllowedForBlockNotInStatusDefinite", "ConfirmNotAllowedForBlockNotInStatusTentative", "ConfirmNotAllowedForBlockInThePast", "CancelNotAllowedForBlockWithNotCancelledReservations", "CancelNotAllowedForBlockNotInStatusDefiniteOrTentative", "PickupNotAllowedForBlockNotInStatusDefinite", "PickupNotAllowedForBlockInThePast", "PickupNotAllowedForFullyPickedBlock", "ModifyNotAllowedForBlockInThePast", "ModifyNotAllowedForBlockInStatusCanceled", "WashNotAllowedForBlockNotInStatusDefinite", "WashNotAllowedForBlockWithoutReservations" ], "type": "string" }, "message": { "type": "string" } } }, "ActionReasonModel[NotAllowedGroupActionReason]": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "enum": [ "DeleteNotAllowedForGroupWithBlocks" ], "type": "string" }, "message": { "type": "string" } } }, "ActionReasonModel[NotAllowedReservationActionReason]": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "enum": [ "CheckInNotAllowedForReservationNotInStatusConfirmed", "CheckInNotAllowedBeforeArrivalDate", "CheckInNotAllowedAfterDepartureDateTime", "CheckInNotAllowedWithoutUnitAssignedForWholeStay", "CheckOutNotAllowedForReservationNotInStatusInHouse", "CheckOutNotAllowedForPastReservationNotInStatusConfirmedOrInHouse", "CheckOutNotAllowedWithDepartureDateMoreThanOneDayInTheFuture", "CancelNotAllowedForReservationNotInStatusConfirmed", "AmendNotAllowedForNotAmendableTimeSlices", "AmendArrivalNotAllowedForNotAmendableTimeSlices", "AmendArrivalNotAllowedForReservationNotInStatusConfirmed", "AmendDepartureNotAllowedForReservationNotInStatusConfirmedOrInHouse", "AmendDepartureNotAllowedForReservationDepartureDateTooFarInThePast", "NoShowNotAllowedForReservationNotInStatusConfirmed", "NoShowNotAllowedBeforeArrivalDate", "AssignUnitNotAllowedForReservationInThePast", "AssignUnitNotAllowedForReservationNotInStatusConfirmedOrInHouse", "UnassignUnitNotAllowedForReservationInThePast", "UnassignUnitNotAllowedForReservationNotInStatusConfirmed", "UnassignUnitNotAllowedForReservationWithoutUnit", "RemoveCityTaxNotAllowedForReservationNotInStatusConfirmedOrInHouse", "RemoveCityTaxNotAllowedForReservationWithPostedCharges", "RemoveCityTaxNotAllowedForReservationWithoutCityTax", "AddCityTaxNotAllowedForReservationNotInStatusConfirmedOrInHouse", "AddCityTaxNotAllowedForReservationWithCityTax", "AddCityTaxNotAllowedForReservationForRatePlanNotSubjectToCityTax", "AddCityTaxNotAllowedForReservationWithPostedCharges", "RemoveServiceNotAllowedForReservationNotInStatusConfirmedOrInHouse", "RemoveServiceNotAllowedForReservationInThePast" ], "type": "string" }, "message": { "type": "string" } } }, "ActionReasonModel[NotAllowedReservationTimeSliceActionReason]": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "enum": [ "AmendNotAllowedWhenTimeSliceIsInThePast", "AmendNotAllowedWhenTimeSliceIsAlreadyPosted", "AmendNotAllowedForReservationInFinalStatus" ], "type": "string" }, "message": { "type": "string" } } }, "AddReservationsModel": { "description": "With this request you can add reservations to an existing booking", "required": [ "reservations" ], "type": "object", "properties": { "reservations": { "description": "List of reservations to add to the existing booking", "type": "array", "items": { "$ref": "#/definitions/CreateReservationModel" } }, "transactionReference": { "description": "The reference of a payment transaction. This should be set when a payment transaction has been initiated and should be used to complete the transaction upon reservation creation.\r\nWhen set, the payment transaction completion is always triggered regardless of the reservation guarantee type and payment automation settings.", "type": "string" } }, "example": "{\n \"reservations\": [\n {\n \"arrival\": \"2022-02-24\",\n \"departure\": \"2022-02-26\",\n \"adults\": 1,\n \"comment\": \"I need a wake up service\",\n \"externalCode\": \"812864414|381\",\n \"channelCode\": \"BookingCom\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"guaranteeType\": \"Prepayment\",\n \"timeSlices\": [\n {\n \"ratePlanId\": \"MUC-NONREF-DBL\"\n },\n {\n \"ratePlanId\": \"MUC-NONREF-DBL\"\n }\n ],\n \"services\": [\n {\n \"serviceId\": \"MUC-BRKF\"\n },\n {\n \"serviceId\": \"MUC-YOGA\",\n \"dates\": [\n {\n \"serviceDate\": \"2022-02-25\",\n \"amount\": {\n \"amount\": 35.0,\n \"currency\": \"EUR\"\n }\n }\n ]\n }\n ],\n \"companyId\": \"UMBRELLA\",\n \"corporateCode\": \"UMBRELLA-MUC_NONREF_DBL\"\n },\n {\n \"arrival\": \"2022-02-25\",\n \"departure\": \"2022-02-27\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"channelCode\": \"Direct\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Eric\",\n \"middleInitial\": \"E\",\n \"lastName\": \"Steinmetz\",\n \"email\": \"eric.e@steinmetz.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"guaranteeType\": \"CreditCard\",\n \"timeSlices\": [\n {\n \"ratePlanId\": \"BER-FLEX-DBL\"\n },\n {\n \"ratePlanId\": \"BER-FLEX-DBL\"\n }\n ],\n \"commission\": {\n \"commissionAmount\": {\n \"amount\": 20.0,\n \"currency\": \"EUR\"\n },\n \"beforeCommissionAmount\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n }\n ],\n \"transactionReference\": \"RFEUFHEW\"\n}" }, "AmountModel": { "required": [ "currency", "grossAmount", "netAmount", "vatPercent", "vatType" ], "type": "object", "properties": { "grossAmount": { "format": "double", "type": "number" }, "netAmount": { "format": "double", "type": "number" }, "vatType": { "enum": [ "Null", "VeryReduced", "Reduced", "Normal", "Without", "Special", "ReducedCovid19", "NormalCovid19" ], "type": "string" }, "vatPercent": { "format": "double", "type": "number" }, "currency": { "type": "string" } }, "example": "{\n \"grossAmount\": 107.0,\n \"netAmount\": 100.0,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"USD\"\n}" }, "AssignedUnitModel": { "required": [ "unit" ], "type": "object", "properties": { "unit": { "$ref": "#/definitions/EmbeddedUnitModel" } }, "example": "{\n \"unit\": {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.201\",\n \"description\": \"Standard room.\"\n }\n}" }, "AutoAssignedUnitItemModel": { "required": [ "from", "to", "unit" ], "type": "object", "properties": { "unit": { "$ref": "#/definitions/EmbeddedUnitModel" }, "from": { "format": "date-time", "description": "The start date and time for this time slice
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "The end date and time for this time slice
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" } } }, "AutoAssignedUnitListModel": { "required": [ "timeSlices" ], "type": "object", "properties": { "timeSlices": { "description": "The list of time slices with the respective assigned unit", "type": "array", "items": { "$ref": "#/definitions/AutoAssignedUnitItemModel" } } }, "example": "{\n \"timeSlices\": [\n {\n \"unit\": {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.201\",\n \"description\": \"Standard room.\"\n },\n \"from\": \"2022-02-22T17:00:00+01:00\",\n \"to\": \"2022-02-23T11:00:00+01:00\"\n },\n {\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"from\": \"2022-02-23T17:00:00+01:00\",\n \"to\": \"2022-02-24T11:00:00+01:00\"\n }\n ]\n}" }, "BlockCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Block id", "type": "string" } }, "example": "{\n \"id\": \"MUC-HSGTDG\"\n}" }, "BlockItemModel": { "required": [ "created", "from", "grossDailyRate", "group", "id", "modified", "pickedReservations", "property", "ratePlan", "status", "to", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Block id", "type": "string" }, "group": { "$ref": "#/definitions/EmbeddedGroupModel" }, "status": { "description": "Status of the block", "enum": [ "Tentative", "Definite", "Canceled" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "grossDailyRate": { "$ref": "#/definitions/MonetaryValueModel" }, "from": { "format": "date-time", "description": "Start date and time from which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time until which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "pickedReservations": { "format": "int32", "description": "Number of reservations already picked from this block", "type": "integer" }, "promoCode": { "description": "The promo code associated with a certain special offer used to create the block", "type": "string" }, "corporateCode": { "description": "The corporate code associated with a certain special offer used to create the block", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "timeSlices": { "description": "The list of blocked units for each time slice", "type": "array", "items": { "$ref": "#/definitions/BlockTimeSliceModel" } }, "actions": { "description": "The list of actions for this block", "type": "array", "items": { "$ref": "#/definitions/ActionModel[BlockAction,NotAllowedBlockActionReason]" } } } }, "BlockListModel": { "required": [ "blocks", "count" ], "type": "object", "properties": { "blocks": { "description": "List of blocks", "type": "array", "items": { "$ref": "#/definitions/BlockItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"blocks\": [\n {\n \"id\": \"MUC-HSGTDG\",\n \"group\": {\n \"id\": \"XPGMSXGF\",\n \"name\": \"apaleo Summer Festival 2023\"\n },\n \"status\": \"Tentative\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_SGL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"grossDailyRate\": {\n \"amount\": 160.0,\n \"currency\": \"EUR\"\n },\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-02-28T11:00:00+01:00\",\n \"pickedReservations\": 0,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"timeSlices\": [\n {\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-02-28T11:00:00+01:00\",\n \"blockedUnits\": 2,\n \"pickedUnits\": 0\n }\n ]\n },\n {\n \"id\": \"MUC-JAIULS\",\n \"group\": {\n \"id\": \"XPGMSXGF\",\n \"name\": \"apaleo Summer Festival 2023\"\n },\n \"status\": \"Definite\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"grossDailyRate\": {\n \"amount\": 190.0,\n \"currency\": \"EUR\"\n },\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-03-01T11:00:00+01:00\",\n \"pickedReservations\": 1,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"timeSlices\": [\n {\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-02-28T11:00:00+01:00\",\n \"blockedUnits\": 2,\n \"pickedUnits\": 1\n },\n {\n \"from\": \"2022-02-28T17:00:00+01:00\",\n \"to\": \"2022-03-01T11:00:00+01:00\",\n \"blockedUnits\": 3,\n \"pickedUnits\": 1\n }\n ]\n }\n ],\n \"count\": 2\n}" }, "BlockModel": { "required": [ "created", "from", "grossDailyRate", "group", "id", "modified", "pickedReservations", "property", "ratePlan", "status", "to", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Block id", "type": "string" }, "group": { "$ref": "#/definitions/EmbeddedGroupModel" }, "status": { "description": "Status of the block. Tentative will just mark inventory as requested, but still allows to sell it\r\nthrough other channels. Definite will block the inventory for selling through other channels", "enum": [ "Tentative", "Definite", "Canceled" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "grossDailyRate": { "$ref": "#/definitions/MonetaryValueModel" }, "from": { "format": "date-time", "description": "Start date and time from which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time until which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "pickedReservations": { "format": "int32", "description": "Number of reservations already picked from this block", "type": "integer" }, "promoCode": { "description": "The promo code associated with a certain special offer used to create the block", "type": "string" }, "corporateCode": { "description": "The corporate code associated with a certain special offer used to create the block", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "timeSlices": { "description": "The list of time slices for this block", "type": "array", "items": { "$ref": "#/definitions/BlockTimeSliceModel" } }, "actions": { "description": "The list of actions for this block", "type": "array", "items": { "$ref": "#/definitions/ActionModel[BlockAction,NotAllowedBlockActionReason]" } } }, "example": "{\n \"id\": \"MUC-HSGTDG\",\n \"group\": {\n \"id\": \"XPGMSXGF\",\n \"name\": \"apaleo Summer Festival 2023\"\n },\n \"status\": \"Tentative\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_SGL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"grossDailyRate\": {\n \"amount\": 160.0,\n \"currency\": \"EUR\"\n },\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-03-01T11:00:00+01:00\",\n \"pickedReservations\": 0,\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"timeSlices\": [\n {\n \"from\": \"2022-02-27T17:00:00+01:00\",\n \"to\": \"2022-02-28T11:00:00+01:00\",\n \"blockedUnits\": 2,\n \"pickedUnits\": 0\n },\n {\n \"from\": \"2022-02-28T17:00:00+01:00\",\n \"to\": \"2022-03-01T11:00:00+01:00\",\n \"blockedUnits\": 3,\n \"pickedUnits\": 0\n }\n ]\n}" }, "BlockTimeSliceModel": { "required": [ "baseAmount", "blockedUnits", "from", "pickedUnits", "to", "totalGrossAmount" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "Start date and time from which units will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time until which units will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "blockedUnits": { "format": "int32", "description": "Number of units blocked for this time slice", "type": "integer" }, "pickedUnits": { "format": "int32", "description": "Number of units which have picked reservations for this time slice", "type": "integer" }, "baseAmount": { "$ref": "#/definitions/AmountModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" } } }, "BookerModel": { "required": [ "lastName" ], "type": "object", "properties": { "title": { "description": "Title of the booker", "enum": [ "Mr", "Ms", "Dr", "Prof", "Mrs", "Other" ], "type": "string" }, "gender": { "description": "Gender of the booker", "enum": [ "Female", "Male", "Other" ], "type": "string" }, "firstName": { "description": "First name of the booker", "type": "string" }, "middleInitial": { "description": "Middle initial of the booker", "type": "string" }, "lastName": { "description": "Last name of the booker", "type": "string" }, "email": { "description": "Email address of the booker", "type": "string" }, "phone": { "description": "Phone number of the booker", "type": "string" }, "address": { "$ref": "#/definitions/PersonAddressModel" }, "nationalityCountryCode": { "description": "The booker's nationality, in ISO 3166-1 alpha-2 code", "type": "string" }, "identificationNumber": { "description": "The booker's identification number for the given identificationType.", "type": "string" }, "identificationIssueDate": { "format": "date", "description": "The issue date of the booker's identification document.", "type": "string", "example": "2020-10-10" }, "identificationType": { "description": "The type of the identificationNumber", "enum": [ "SocialInsuranceNumber", "PassportNumber", "IdNumber", "DriverLicenseNumber" ], "type": "string" }, "company": { "$ref": "#/definitions/PersonCompanyModel" }, "preferredLanguage": { "description": "Preferred contact two-letter language code (ISO Alpha-2)", "type": "string" }, "birthDate": { "format": "date", "description": "Birth date", "type": "string", "example": "2020-10-10" }, "birthPlace": { "description": "The place of birth", "type": "string" } } }, "BookingCreatedModel": { "required": [ "id", "reservationIds" ], "type": "object", "properties": { "id": { "description": "Booking id", "type": "string" }, "reservationIds": { "description": "List of ids for newly created reservations", "type": "array", "items": { "$ref": "#/definitions/ReservationCreatedModel" } } }, "example": "{\n \"id\": \"XPGMSXGF\",\n \"reservationIds\": [\n {\n \"id\": \"XPGMSXGF-1\"\n },\n {\n \"id\": \"XPGMSXGF-2\"\n }\n ]\n}" }, "BookingItemModel": { "description": "A booking holds all shared metadata for a set of reservations", "required": [ "created", "id", "modified" ], "type": "object", "properties": { "id": { "description": "Booking id", "type": "string" }, "groupId": { "description": "Group id", "type": "string" }, "booker": { "$ref": "#/definitions/BookerModel" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comment by the booker", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "reservations": { "description": "Reservations within this booking", "type": "array", "items": { "$ref": "#/definitions/BookingReservationModel" } } } }, "BookingListModel": { "required": [ "bookings", "count" ], "type": "object", "properties": { "bookings": { "type": "array", "items": { "$ref": "#/definitions/BookingItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"bookings\": [\n {\n \"id\": \"XPGMSXGF\",\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"comment\": \"The comment from the front desk or reservation office\",\n \"bookerComment\": \"The comment from the booker provided via the booking channel\",\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"reservations\": [\n {\n \"id\": \"XPGMSXGF-1\",\n \"status\": \"Confirmed\",\n \"externalCode\": \"345343345|334\",\n \"channelCode\": \"BookingCom\",\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-26T11:00:00+01:00\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"totalGrossAmount\": {\n \"amount\": 130.0,\n \"currency\": \"EUR\"\n },\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"guestComment\": \"The comment from the guest provided via the booking channel\",\n \"cancellationFee\": {\n \"id\": \"MUC-FLE\",\n \"code\": \"FLE\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation until 36 hours before arrival.\",\n \"dueDateTime\": \"2022-02-24T17:00:00+01:00\",\n \"fee\": {\n \"amount\": 30.0,\n \"currency\": \"EUR\"\n }\n },\n \"noShowFee\": {\n \"id\": \"MUC-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"No free no-show\",\n \"fee\": {\n \"amount\": 130.0,\n \"currency\": \"EUR\"\n }\n }\n }\n ]\n }\n ],\n \"count\": 1\n}" }, "BookingModel": { "description": "A booking holds all shared metadata for a set of reservations", "required": [ "created", "id", "modified" ], "type": "object", "properties": { "id": { "description": "Booking id", "type": "string" }, "groupId": { "description": "Group id", "type": "string" }, "booker": { "$ref": "#/definitions/BookerModel" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comment by the booker", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "propertyValues": { "description": "Property specific values like total amount and balance", "type": "array", "items": { "$ref": "#/definitions/PropertyValueModel" } }, "reservations": { "description": "Reservations within this booking", "type": "array", "items": { "$ref": "#/definitions/BookingReservationModel" } } }, "example": "{\n \"id\": \"XPGMSXGF\",\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"comment\": \"The comment from the front desk or reservation office\",\n \"bookerComment\": \"The comment from the booker provided via the booking channel\",\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"reservations\": [\n {\n \"id\": \"XPGMSXGF-1\",\n \"status\": \"Confirmed\",\n \"externalCode\": \"345343345|334\",\n \"channelCode\": \"BookingCom\",\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-26T11:00:00+01:00\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"totalGrossAmount\": {\n \"amount\": 130.0,\n \"currency\": \"EUR\"\n },\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"guestComment\": \"The comment from the guest provided via the booking channel\",\n \"company\": {\n \"id\": \"MUC-UMBRELLA\",\n \"code\": \"UMBRELLA\",\n \"name\": \"Umbrella Corp.\",\n \"canCheckOutOnAr\": true\n }\n }\n ]\n}" }, "BookingReservationModel": { "required": [ "adults", "arrival", "cancellationFee", "channelCode", "departure", "id", "noShowFee", "property", "ratePlan", "status", "totalGrossAmount", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Reservation id", "type": "string" }, "status": { "description": "Status of the reservation", "enum": [ "Confirmed", "InHouse", "CheckedOut", "Canceled", "NoShow" ], "type": "string" }, "externalCode": { "description": "Code in external system", "type": "string" }, "channelCode": { "description": "Channel code", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" }, "source": { "description": "Source of the reservation (e.g Hotels.com, Orbitz, etc.)", "type": "string" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "arrival": { "format": "date-time", "description": "Date of arrival
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "format": "date-time", "description": "Date of departure
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "The ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "services": { "description": "The list of additional services (extras, add-ons) reserved for the stay", "type": "array", "items": { "$ref": "#/definitions/ReservationServiceItemModel" } }, "guestComment": { "description": "Additional information and comment by the guest", "type": "string" }, "cancellationFee": { "$ref": "#/definitions/ReservationCancellationFeeModel" }, "noShowFee": { "$ref": "#/definitions/ReservationNoShowFeeModel" }, "company": { "$ref": "#/definitions/EmbeddedCompanyModel" } } }, "BookReservationServiceModel": { "required": [ "serviceId" ], "type": "object", "properties": { "serviceId": { "description": "The id of the service you want to book", "type": "string" }, "count": { "format": "int32", "description": "The number of services to book for each service date. It defaults to the service offer count when not specified.", "type": "integer" }, "amount": { "$ref": "#/definitions/MonetaryValueModel" }, "dates": { "description": "The optional dates you want to book the service for; if not specified the default service pattern will be used (e.g. whole stay).", "type": "array", "items": { "$ref": "#/definitions/Date" } } }, "example": "{\n \"serviceId\": \"MUC-SPA\",\n \"dates\": [\n {\n \"serviceDate\": \"2022-02-22\",\n \"amount\": {\n \"amount\": 25.0,\n \"currency\": \"EUR\"\n }\n },\n {\n \"serviceDate\": \"2022-02-23\"\n }\n ]\n}" }, "CommissionModel": { "required": [ "commissionAmount" ], "type": "object", "properties": { "commissionAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "beforeCommissionAmount": { "$ref": "#/definitions/MonetaryValueModel" } } }, "CreateBlockModel": { "required": [ "from", "grossDailyRate", "groupId", "ratePlanId", "to" ], "type": "object", "properties": { "groupId": { "description": "ID of the group that reserved the block", "type": "string" }, "ratePlanId": { "description": "The rate plan", "type": "string" }, "from": { "description": "Start date and time from which the inventory will be blocked
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "description": "End date and time until which the inventory will be blocked. Cannot be more than 5 years after the start date.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "grossDailyRate": { "$ref": "#/definitions/MonetaryValueModel" }, "timeSlices": { "description": "The list of blocked units for each time slice", "type": "array", "items": { "$ref": "#/definitions/CreateBlockTimeSliceModel" } }, "blockedUnits": { "format": "int32", "description": "Number of units to block for the defined time period", "type": "integer" }, "promoCode": { "description": "The promo code associated with a certain special offer", "type": "string" }, "corporateCode": { "description": "The corporate code associated with a certain special offer", "type": "string" } }, "example": "{\n \"groupId\": \"XPGMSXGF\",\n \"ratePlanId\": \"MUC-NONREF-SGL\",\n \"from\": \"2022-02-27\",\n \"to\": \"2022-03-02\",\n \"grossDailyRate\": {\n \"amount\": 160.0,\n \"currency\": \"EUR\"\n },\n \"timeSlices\": [\n {\n \"blockedUnits\": 3\n },\n {\n \"blockedUnits\": 0\n },\n {\n \"blockedUnits\": 7\n }\n ]\n}" }, "CreateBlockTimeSliceModel": { "required": [ "blockedUnits" ], "type": "object", "properties": { "blockedUnits": { "format": "int32", "description": "Number of units blocked for the time slice", "type": "integer" } } }, "CreateBookingModel": { "description": "With this request you can create a booking", "required": [ "booker", "reservations" ], "type": "object", "properties": { "paymentAccount": { "$ref": "#/definitions/CreatePaymentAccountModel" }, "booker": { "$ref": "#/definitions/BookerModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comments by the booker", "type": "string" }, "reservations": { "description": "List of reservations to create", "type": "array", "items": { "$ref": "#/definitions/CreateReservationModel" } }, "transactionReference": { "description": "The reference of a payment transaction. This should be set when a payment transaction has been initiated and should be used to complete the transaction upon reservation creation.\r\nWhen set, the payment transaction completion is always triggered regardless of the reservation guarantee type and payment automation settings.", "type": "string" } }, "example": "{\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"payerReference\": \"4ea6462b-cca3-4c17-a035-c7b5132db83c\",\n \"isVirtual\": false\n },\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"reservations\": [\n {\n \"arrival\": \"2022-02-24\",\n \"departure\": \"2022-02-26\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"guestComment\": \"I need a wake up service\",\n \"channelCode\": \"Direct\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"guaranteeType\": \"Prepayment\",\n \"travelPurpose\": \"Business\",\n \"timeSlices\": [\n {\n \"ratePlanId\": \"MUC-NONREF-FAMILY\"\n },\n {\n \"ratePlanId\": \"MUC-NONREF-FAMILY\"\n }\n ],\n \"services\": [\n {\n \"serviceId\": \"MUC-BRKF\"\n },\n {\n \"serviceId\": \"MUC-YOGA\",\n \"dates\": [\n {\n \"serviceDate\": \"2022-02-25\",\n \"amount\": {\n \"amount\": 35.0,\n \"currency\": \"EUR\"\n }\n }\n ]\n }\n ],\n \"prePaymentAmount\": {\n \"amount\": 50.0,\n \"currency\": \"EUR\"\n }\n },\n {\n \"arrival\": \"2022-02-25\",\n \"departure\": \"2022-02-27\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"channelCode\": \"Direct\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Eric\",\n \"middleInitial\": \"E\",\n \"lastName\": \"Steinmetz\",\n \"email\": \"eric.e@steinmetz.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"guaranteeType\": \"CreditCard\",\n \"timeSlices\": [\n {\n \"ratePlanId\": \"BER-FLEX-DBL\",\n \"totalAmount\": {\n \"amount\": 120.0,\n \"currency\": \"EUR\"\n }\n },\n {\n \"ratePlanId\": \"BER-FLEX-DBL\",\n \"totalAmount\": {\n \"amount\": 125.0,\n \"currency\": \"EUR\"\n }\n }\n ],\n \"companyId\": \"BER-UMBRELLA\",\n \"commission\": {\n \"commissionAmount\": {\n \"amount\": 20.0,\n \"currency\": \"EUR\"\n },\n \"beforeCommissionAmount\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n }\n ],\n \"transactionReference\": \"564578124534890J\"\n}" }, "CreateGroupModel": { "description": "With this request you can create a group booking request", "required": [ "booker", "name", "propertyIds" ], "type": "object", "properties": { "name": { "description": "Name of the group", "type": "string" }, "booker": { "$ref": "#/definitions/BookerModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comment by the booker", "type": "string" }, "paymentAccount": { "$ref": "#/definitions/CreatePaymentAccountModel" }, "propertyIds": { "description": "List of property ids the group booking belongs to", "type": "array", "items": { "type": "string" } } }, "example": "{\n \"name\": \"apaleo Summer Festival 2023\",\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"payerReference\": \"4ea6462b-cca3-4c17-a035-c7b5132db83c\",\n \"isVirtual\": false\n },\n \"propertyIds\": [\n \"MUC\"\n ]\n}" }, "CreatePaymentAccountModel": { "type": "object", "properties": { "accountNumber": { "description": "The account number (e.g. masked credit card number or last 4 digits)", "type": "string" }, "accountHolder": { "description": "The account holder (e.g. card holder)", "type": "string" }, "expiryMonth": { "description": "The credit card's expiration month", "type": "string" }, "expiryYear": { "description": "The credit card's expiration year", "type": "string" }, "paymentMethod": { "description": "The payment method (e.g. visa)", "type": "string" }, "payerEmail": { "description": "The email address of the shopper / customer", "type": "string" }, "payerReference": { "description": "The reference used to uniquely identify the shopper (e.g. user ID or account ID). Used for recurring payments", "type": "string" }, "isVirtual": { "description": "Indicates if the payment account is a virtual credit card. If not specified it defaults to 'false'", "type": "boolean" }, "inactiveReason": { "description": "A reason why account is inactive when PayerReference was not provided", "type": "string" } } }, "CreateReservationModel": { "description": "With this request you can create a reservation", "required": [ "adults", "arrival", "channelCode", "departure", "timeSlices" ], "type": "object", "properties": { "arrival": { "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "Ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "comment": { "description": "Additional information and comments", "type": "string" }, "guestComment": { "description": "Additional information and comments by the guest", "type": "string" }, "externalCode": { "description": "Code in some system", "type": "string" }, "channelCode": { "description": "Channel code", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" }, "source": { "description": "Source of the reservation", "type": "string" }, "primaryGuest": { "$ref": "#/definitions/GuestModel" }, "additionalGuests": { "description": "Additional guests of the reservation.", "type": "array", "items": { "$ref": "#/definitions/GuestModel" } }, "guaranteeType": { "description": "The guarantee that has to be applied for this reservation. It has to be the same or stronger than\r\nthe minimum guarantee required by the selected rate plan", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "travelPurpose": { "description": "Purpose of the trip, leisure or business", "enum": [ "Business", "Leisure" ], "type": "string" }, "timeSlices": { "description": "Gross prices including services and taxes for each time slice. They will be applied to the reservation timeslices\r\nin the order specified from arrival to departure", "type": "array", "items": { "$ref": "#/definitions/CreateReservationTimeSliceModel" } }, "services": { "description": "Additional services (extras, add-ons) that should be added to the reservation", "type": "array", "items": { "$ref": "#/definitions/BookReservationServiceModel" } }, "companyId": { "description": "Set this if this reservation belongs to a company", "type": "string" }, "corporateCode": { "description": "Corporate code provided during creation. Used to find offers during amend.", "type": "string" }, "prePaymentAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "commission": { "$ref": "#/definitions/CommissionModel" }, "promoCode": { "description": "The promo code associated with a certain special offer", "type": "string" } } }, "CreateReservationTimeSliceModel": { "required": [ "ratePlanId" ], "type": "object", "properties": { "ratePlanId": { "description": "The rate plan id for this time slice", "type": "string" }, "totalAmount": { "$ref": "#/definitions/MonetaryValueModel" } } }, "Date": { "required": [ "serviceDate" ], "type": "object", "properties": { "serviceDate": { "format": "date", "description": "The date the service is delivered", "type": "string", "example": "2020-10-10" }, "count": { "format": "int32", "description": "The number of services to book for this date. It defaults to the service offer count when not specified.", "type": "integer" }, "amount": { "$ref": "#/definitions/MonetaryValueModel" } } }, "DesiredStayDetailsModel": { "required": [ "adults", "arrival", "departure", "timeSlices" ], "type": "object", "properties": { "arrival": { "description": "Date and optional time of arrival
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "description": "Date and optional time of departure. Cannot be more than 5 years after arrival.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "Ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "requote": { "description": "Whether the prices for time slices with no change to the rate plan should be re-quoted based on current prices, or if\r\nonly additions like change of number of adults should be calculated. Defaults to 'false'.", "type": "boolean" }, "timeSlices": { "description": "The list of time slices", "type": "array", "items": { "$ref": "#/definitions/DesiredTimeSliceModel" } } }, "example": "{\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-26T11:00:00+01:00\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"requote\": false,\n \"timeSlices\": [\n {\n \"ratePlanId\": \"MUC-NONREF-DBL\",\n \"totalGrossAmount\": {\n \"amount\": 86.00,\n \"currency\": \"EUR\"\n }\n },\n {\n \"ratePlanId\": \"MUC-NONREF-DBL\",\n \"totalGrossAmount\": {\n \"amount\": 101.00,\n \"currency\": \"EUR\"\n }\n }\n ]\n}" }, "DesiredTimeSliceModel": { "required": [ "ratePlanId" ], "type": "object", "properties": { "ratePlanId": { "description": "The rate plan id for this time slice", "type": "string" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" } } }, "EmbeddedGroupModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Group booking id", "type": "string" }, "name": { "description": "Name of the group", "type": "string" } } }, "GroupBlockModel": { "required": [ "blockedUnits", "created", "from", "grossDailyRate", "id", "modified", "pickedReservations", "property", "ratePlan", "status", "to", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Block id", "type": "string" }, "status": { "description": "Status of the block", "enum": [ "Tentative", "Definite", "Canceled" ], "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "grossDailyRate": { "$ref": "#/definitions/MonetaryValueModel" }, "from": { "format": "date-time", "description": "Start date and time from which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time until which the inventory will be blocked
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "blockedUnits": { "format": "int32", "description": "Number of units blocked", "type": "integer" }, "pickedReservations": { "format": "int32", "description": "Number of reservations already picked from this block", "type": "integer" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" } } }, "GroupCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Id of newly created group booking", "type": "string" } }, "example": "{\n \"id\": \"XPGMSXGF\"\n}" }, "GroupItemModel": { "required": [ "created", "id", "modified", "name", "propertyIds" ], "type": "object", "properties": { "id": { "description": "Group id", "type": "string" }, "from": { "format": "date-time", "description": "Start date and time of the earliest block for this group
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time of the latest block for this group
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "name": { "description": "Name of the group", "type": "string" }, "booker": { "$ref": "#/definitions/BookerModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comment by the booker", "type": "string" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "blocks": { "description": "Blocks within this group", "type": "array", "items": { "$ref": "#/definitions/GroupBlockModel" } }, "actions": { "description": "The list of actions for this group", "type": "array", "items": { "$ref": "#/definitions/ActionModel[GroupAction,NotAllowedGroupActionReason]" } }, "propertyIds": { "description": "The list of property ids this group belongs to", "type": "array", "items": { "type": "string" } } } }, "GroupListModel": { "required": [ "count", "groups" ], "type": "object", "properties": { "groups": { "type": "array", "items": { "$ref": "#/definitions/GroupItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"groups\": [\n {\n \"id\": \"XPGMSXGF\",\n \"name\": \"apaleo Summer Festival 2023\",\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\"\n }\n ],\n \"count\": 1\n}" }, "GroupModel": { "required": [ "created", "id", "modified", "name", "propertyIds" ], "type": "object", "properties": { "id": { "description": "Group id", "type": "string" }, "name": { "description": "Name of the group", "type": "string" }, "from": { "format": "date-time", "description": "Start date and time of the earliest block for this group
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "End date and time of the latest block for this group
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "booker": { "$ref": "#/definitions/BookerModel" }, "comment": { "description": "Additional information and comments", "type": "string" }, "bookerComment": { "description": "Additional information and comment by the booker", "type": "string" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "blocks": { "description": "Blocks within this group", "type": "array", "items": { "$ref": "#/definitions/GroupBlockModel" } }, "actions": { "description": "The list of actions for this group", "type": "array", "items": { "$ref": "#/definitions/ActionModel[GroupAction,NotAllowedGroupActionReason]" } }, "propertyIds": { "description": "The list of property ids this group belongs to", "type": "array", "items": { "type": "string" } } }, "example": "{\n \"id\": \"XPGMSXGF\",\n \"name\": \"apaleo Summer Festival 2023\",\n \"from\": \"2022-02-27T14:00:43.4854081+01:00\",\n \"to\": \"2022-03-06T14:00:43.4854081+01:00\",\n \"booker\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"created\": \"0001-01-01T00:00:00Z\",\n \"modified\": \"0001-01-01T00:00:00Z\",\n \"blocks\": [\n {\n \"id\": \"MUC-HSGTDG\",\n \"status\": \"Tentative\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_SGL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"grossDailyRate\": {\n \"amount\": 160.0,\n \"currency\": \"EUR\"\n },\n \"from\": \"2022-02-27T14:00:43.4854081+01:00\",\n \"to\": \"2022-03-04T14:00:43.4854081+01:00\",\n \"blockedUnits\": 10,\n \"pickedReservations\": 0,\n \"created\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"modified\": \"2022-02-22T14:00:43.4854081+01:00\"\n },\n {\n \"id\": \"MUC-JAIULS\",\n \"status\": \"Definite\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"grossDailyRate\": {\n \"amount\": 190.0,\n \"currency\": \"EUR\"\n },\n \"from\": \"2022-02-28T14:00:43.4854081+01:00\",\n \"to\": \"2022-03-06T14:00:43.4854081+01:00\",\n \"blockedUnits\": 8,\n \"pickedReservations\": 3,\n \"created\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"modified\": \"2022-02-22T14:00:43.4854081+01:00\"\n }\n ],\n \"propertyIds\": [\n \"MUC\"\n ]\n}" }, "GuestModel": { "required": [ "lastName" ], "type": "object", "properties": { "title": { "description": "Title of the guest", "enum": [ "Mr", "Ms", "Dr", "Prof", "Mrs", "Other" ], "type": "string" }, "gender": { "description": "Gender of the booker", "enum": [ "Female", "Male", "Other" ], "type": "string" }, "firstName": { "description": "First name of the guest", "type": "string" }, "middleInitial": { "description": "Middle initial of the guest", "type": "string" }, "lastName": { "description": "Last name of the guest", "type": "string" }, "email": { "description": "Email address of the guest", "type": "string" }, "phone": { "description": "Phone number of the guest", "type": "string" }, "address": { "$ref": "#/definitions/PersonAddressModel" }, "nationalityCountryCode": { "description": "The guest's nationality, in ISO 3166-1 alpha-2 code", "type": "string" }, "identificationNumber": { "description": "The guest's identification number for the given identificationType.", "type": "string" }, "identificationIssueDate": { "format": "date", "description": "The issue date of the guest's identification document.", "type": "string", "example": "2020-10-10" }, "identificationType": { "description": "The type of the identificationNumber", "enum": [ "SocialInsuranceNumber", "PassportNumber", "IdNumber", "DriverLicenseNumber" ], "type": "string" }, "company": { "$ref": "#/definitions/PersonCompanyModel" }, "preferredLanguage": { "description": "Two-letter code (ISO Alpha-2) of a language preferred for contact", "type": "string" }, "birthDate": { "format": "date", "description": "Guest's birthdate", "type": "string", "example": "2020-10-10" }, "birthPlace": { "description": "Guest's place of birth", "type": "string" } } }, "OfferCancellationFeeModel": { "required": [ "code", "description", "dueDateTime", "fee", "name" ], "type": "object", "properties": { "code": { "description": "The code of the cancellation policy applied", "type": "string" }, "name": { "description": "The name of the cancellation policy applied", "type": "string" }, "description": { "description": "The description of the cancellation policy applied", "type": "string" }, "dueDateTime": { "format": "date-time", "description": "The date and time the cancellation fee will be due. After that time this fee will\r\nbe charged in case of cancellation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "fee": { "$ref": "#/definitions/MonetaryValueModel" } } }, "OfferCityTaxItemModel": { "required": [ "amount", "serviceDate" ], "type": "object", "properties": { "serviceDate": { "format": "date", "description": "The date for this city tax", "type": "string", "example": "2020-10-10" }, "amount": { "$ref": "#/definitions/AmountModel" } } }, "OfferCityTaxModel": { "required": [ "code", "dates", "id", "name", "totalGrossAmount" ], "type": "object", "properties": { "id": { "description": "The id of the city tax", "type": "string" }, "code": { "description": "The code of the city tax", "type": "string" }, "name": { "description": "The name for the city tax", "type": "string" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "dates": { "description": "Split per day for the city tax", "type": "array", "items": { "$ref": "#/definitions/OfferCityTaxItemModel" } } } }, "OfferFeeModel": { "required": [ "code", "id", "name", "totalAmount" ], "type": "object", "properties": { "id": { "description": "The fee id", "type": "string" }, "code": { "description": "The code for the fee", "type": "string" }, "name": { "description": "The name for the fee", "type": "string" }, "totalAmount": { "$ref": "#/definitions/AmountModel" } } }, "OfferModel": { "required": [ "arrival", "availableUnits", "cancellationFee", "departure", "isCorporate", "minGuaranteeType", "noShowFee", "prePaymentAmount", "ratePlan", "taxDetails", "timeSlices", "totalGrossAmount", "unitGroup" ], "type": "object", "properties": { "arrival": { "format": "date-time", "description": "The earliest arrival date and time for this offer
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "format": "date-time", "description": "The latest departure date and time for this offer
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "unitGroup": { "$ref": "#/definitions/OfferUnitGroupModel" }, "minGuaranteeType": { "description": "The minimum guarantee type for this offer", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "availableUnits": { "format": "int32", "description": "The number of available units for that offer", "type": "integer" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "cancellationFee": { "$ref": "#/definitions/OfferCancellationFeeModel" }, "noShowFee": { "$ref": "#/definitions/OfferNoShowFeeModel" }, "timeSlices": { "description": "The breakdown for each time slice for this offer", "type": "array", "items": { "$ref": "#/definitions/OfferTimeSliceModel" } }, "services": { "description": "The list of the mandatory services for this offer. Such services will be automatically booked when booking this offer", "type": "array", "items": { "$ref": "#/definitions/ServiceOfferModel" } }, "fees": { "description": "The details of the fees that will be added on top of the Apaleo.Api.Modules.Booking.Models.Offer.StayOffer.OfferModel.TotalGrossAmount when creating the booking", "type": "array", "items": { "$ref": "#/definitions/OfferFeeModel" } }, "taxDetails": { "description": "Tax breakdown, displaying net and tax amount for each VAT type", "type": "array", "items": { "$ref": "#/definitions/TaxDetailModel" } }, "validationMessages": { "description": "Validation rules that were applied to the offer and show the reason why the offer is not bookable", "type": "array", "items": { "$ref": "#/definitions/OfferValidationMessageModel" } }, "companyId": { "description": "ID of the company the offer is created for", "type": "string" }, "corporateCode": { "description": "The corporate rate code the offer is created for", "type": "string" }, "isCorporate": { "description": "Whether the offer is for a corporate rate plan", "type": "boolean" }, "prePaymentAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "cityTax": { "$ref": "#/definitions/AmountModel" }, "cityTaxes": { "description": "Details of city taxes for this offer, if any", "type": "array", "items": { "$ref": "#/definitions/OfferCityTaxModel" } } } }, "OfferNoShowFeeModel": { "required": [ "code", "description", "fee", "name" ], "type": "object", "properties": { "code": { "description": "The code of the no-show policy applied", "type": "string" }, "name": { "description": "The name of the no-show policy applied", "type": "string" }, "description": { "description": "The description of the no-show policy applied", "type": "string" }, "fee": { "$ref": "#/definitions/MonetaryValueModel" } } }, "OfferServiceModel": { "required": [ "amount", "count", "pricingMode", "service", "serviceDate" ], "type": "object", "properties": { "service": { "$ref": "#/definitions/EmbeddedServiceModel" }, "serviceDate": { "format": "date", "description": "The date this service is delivered", "type": "string", "example": "2020-10-10" }, "count": { "format": "int32", "description": "The default count of offered services. For services whose pricing unit is 'Person' it will be based on the adults and children specified, otherwise 1.", "type": "integer" }, "availableCount": { "format": "int32", "description": "If set - the number of services available (only for the limited service).\r\nIf not set - the service is unlimited.", "type": "integer" }, "amount": { "$ref": "#/definitions/AmountModel" }, "pricingMode": { "description": "Whether the service price is included in or added to the base rate", "enum": [ "Included", "Additional" ], "type": "string" } } }, "OfferTimeSliceModel": { "required": [ "availableUnits", "baseAmount", "from", "to", "totalGrossAmount" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "The start date and time for this time slice
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "The end date and time for this time slice
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "availableUnits": { "format": "int32", "description": "The number of available units for that time slice", "type": "integer" }, "baseAmount": { "$ref": "#/definitions/AmountModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "includedServices": { "description": "The breakdown for services included in the offer", "type": "array", "items": { "$ref": "#/definitions/OfferServiceModel" } } } }, "OfferUnitGroupModel": { "required": [ "code", "description", "id", "maxPersons", "name", "type" ], "type": "object", "properties": { "id": { "description": "The unit group id", "type": "string" }, "code": { "description": "The code for the unit group that can be shown in reports and table views", "type": "string" }, "name": { "description": "The name for the unit group", "type": "string" }, "description": { "description": "The description for the unit group", "type": "string" }, "maxPersons": { "format": "int32", "description": "Maximum number of persons for the unit group", "type": "integer" }, "rank": { "format": "int32", "description": "The unit group rank", "type": "integer" }, "type": { "description": "The unit group type", "enum": [ "BedRoom", "MeetingRoom", "EventSpace", "ParkingLot", "Other" ], "type": "string" } } }, "OfferValidationMessageModel": { "required": [ "code", "message" ], "type": "object", "properties": { "code": { "description": "The message Code", "enum": [ "UnitGroupFullyBooked", "UnitGroupCapacityExceeded", "RatePlanRestrictionsViolated", "RatePlanSurchargesNotSet", "RateRestrictionsViolated", "RatePlanChannelNotSet", "RatesNotSet", "BlockFullyBooked", "IncludedServicesAmountExceededRateAmount", "ServiceFullyBooked" ], "type": "string" }, "message": { "description": "The message description", "type": "string" } } }, "PayableAmountModel": { "required": [ "guest" ], "type": "object", "properties": { "guest": { "$ref": "#/definitions/MonetaryValueModel" } } }, "PaymentAccountModel": { "required": [ "isActive" ], "type": "object", "properties": { "accountNumber": { "description": "The account number (e.g. masked credit card number or last 4 digits)", "type": "string" }, "accountHolder": { "description": "The account holder (e.g. card holder)", "type": "string" }, "expiryMonth": { "description": "The credit card's expiration month", "type": "string" }, "expiryYear": { "description": "The credit card's expiration year", "type": "string" }, "paymentMethod": { "description": "The payment method (e.g. visa)", "type": "string" }, "payerEmail": { "description": "The email address of the shopper / customer", "type": "string" }, "payerReference": { "description": "The payer reference. It is used to make recurring captures and its usage is allowed only in the scope of the booking.\r\nFor the reason above this is a write-only field.", "type": "string" }, "isVirtual": { "description": "Indicates if the payment account is a virtual credit card. If not specified it defaults to 'false'", "type": "boolean" }, "isActive": { "description": "Indicates if the payment account can be used for capturing payments. A payment account is active, when it has a valid payer reference set", "type": "boolean" }, "inactiveReason": { "description": "A reason why account is inactive", "type": "string" } } }, "PerOccupancyPriceItemModel": { "required": [ "adults", "price" ], "type": "object", "properties": { "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "price": { "$ref": "#/definitions/PriceModel" } } }, "PersonAddressModel": { "type": "object", "properties": { "addressLine1": { "type": "string" }, "addressLine2": { "type": "string" }, "postalCode": { "type": "string" }, "city": { "type": "string" }, "regionCode": { "type": "string" }, "countryCode": { "type": "string" } } }, "PersonCompanyModel": { "type": "object", "properties": { "name": { "description": "Name of the company", "type": "string" }, "taxId": { "description": "Tax or Vat ID of the company", "type": "string" } } }, "PickUpReservationModel": { "description": "With this request you can pick up a reservation", "required": [ "adults", "arrival", "blockId", "departure" ], "type": "object", "properties": { "blockId": { "description": "ID of the block", "type": "string" }, "services": { "description": "Additional services (extras, add-ons) that should be added to the reservation", "type": "array", "items": { "$ref": "#/definitions/BookReservationServiceModel" } }, "arrival": { "description": "Date of arrival and the optional time with UTC offset
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "description": "Date of departure and the optional time with UTC offset
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "The ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "comment": { "description": "Additional information and comments", "type": "string" }, "guestComment": { "description": "Additional information and comment by the guest", "type": "string" }, "primaryGuest": { "$ref": "#/definitions/GuestModel" }, "additionalGuests": { "description": "Additional guests of the reservation.", "type": "array", "items": { "$ref": "#/definitions/GuestModel" } }, "travelPurpose": { "description": "The purpose of the trip, leisure or business", "enum": [ "Business", "Leisure" ], "type": "string" } } }, "PickUpReservationsModel": { "description": "With this request you can pick up reservations to an existing group booking", "required": [ "reservations" ], "type": "object", "properties": { "reservations": { "description": "List of reservations to pick up to the existing group booking", "type": "array", "items": { "$ref": "#/definitions/PickUpReservationModel" } } }, "example": "{\n \"reservations\": [\n {\n \"blockId\": \"MUC-QJNXJR\",\n \"arrival\": \"2022-02-24\",\n \"departure\": \"2022-02-26\",\n \"adults\": 1,\n \"comment\": \"I need a wake up service\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n },\n \"company\": {\n \"name\": \"Company GmbH\",\n \"taxId\": \"1442\"\n }\n }\n },\n {\n \"blockId\": \"MUC-WKMCKT\",\n \"arrival\": \"2022-02-25\",\n \"departure\": \"2022-02-27\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Eric\",\n \"middleInitial\": \"E\",\n \"lastName\": \"Steinmetz\",\n \"email\": \"eric.e@steinmetz.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 1\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n }\n }\n ]\n}" }, "PriceModel": { "required": [ "afterTax", "beforeTax", "currency", "grossAmount", "taxes" ], "type": "object", "properties": { "grossAmount": { "format": "double", "description": "Price including all included services and VAT - DEPRECATED: This field will be removed soon, use BeforeTax + Taxes.Tax instead", "type": "number" }, "beforeTax": { "format": "double", "description": "Price including all included services without VAT or any other taxes like city tax", "type": "number" }, "afterTax": { "format": "double", "description": "Price including all included services, VAT and any other taxes like city tax", "type": "number" }, "taxes": { "$ref": "#/definitions/TaxesModel" }, "currency": { "description": "The currency for all prices and tax details", "type": "string" } }, "example": "{\n \"grossAmount\": 100.0,\n \"beforeTax\": 91.57,\n \"afterTax\": 101.71,\n \"taxes\": {\n \"tax\": 8.43,\n \"cityTax\": 1.71\n },\n \"currency\": \"USD\"\n}" }, "PropertyValueModel": { "required": [ "balance", "property", "totalGrossAmount" ], "type": "object", "properties": { "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "balance": { "$ref": "#/definitions/MonetaryValueModel" } } }, "ReplaceBlockModel": { "required": [ "from", "grossDailyRate", "timeSlices", "to" ], "type": "object", "properties": { "from": { "description": "Start date and time from which the inventory will be blocked
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "description": "End date and time until which the inventory will be blocked. Cannot be more than 5 years after the start date.
Specify either a pure date or a date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "grossDailyRate": { "$ref": "#/definitions/MonetaryValueModel" }, "timeSlices": { "description": "The list of time slices", "type": "array", "items": { "$ref": "#/definitions/CreateBlockTimeSliceModel" } } }, "example": "{\n \"from\": \"2022-02-27\",\n \"to\": \"2022-03-02\",\n \"grossDailyRate\": {\n \"amount\": 160.0,\n \"currency\": \"EUR\"\n },\n \"timeSlices\": [\n {\n \"blockedUnits\": 3\n },\n {\n \"blockedUnits\": 0\n },\n {\n \"blockedUnits\": 7\n }\n ]\n}" }, "ReservationAssignedUnitModel": { "required": [ "timeRanges", "unit" ], "type": "object", "properties": { "unit": { "$ref": "#/definitions/EmbeddedUnitModel" }, "timeRanges": { "description": "The time ranges for which the unit is assigned to the reservation", "type": "array", "items": { "$ref": "#/definitions/ReservationAssignedUnitTimeRangeModel" } } } }, "ReservationAssignedUnitTimeRangeModel": { "required": [ "from", "to" ], "type": "object", "properties": { "from": { "format": "date-time", "description": "The start date and time of the period for which the unit is assigned to the reservation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "to": { "format": "date-time", "description": "The end date and time of the period for which the unit is assigned to the reservation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" } } }, "ReservationCancellationFeeModel": { "required": [ "code", "description", "dueDateTime", "fee", "id", "name" ], "type": "object", "properties": { "id": { "description": "The id of the cancellation policy applied", "type": "string" }, "code": { "description": "The code of the cancellation policy applied", "type": "string" }, "name": { "description": "The name of the cancellation policy applied", "type": "string" }, "description": { "description": "The description of the cancellation policy applied", "type": "string" }, "dueDateTime": { "format": "date-time", "description": "The date and time the cancellation fee will be due. After that time this fee will\r\nbe charged in case of cancellation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "fee": { "$ref": "#/definitions/MonetaryValueModel" } } }, "ReservationCreatedModel": { "required": [ "id" ], "type": "object", "properties": { "id": { "description": "Id of the reservation", "type": "string" } } }, "ReservationItemModel": { "required": [ "adults", "arrival", "balance", "bookingId", "cancellationFee", "channelCode", "created", "departure", "guaranteeType", "hasCityTax", "id", "modified", "noShowFee", "property", "ratePlan", "status", "totalGrossAmount", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Reservation id", "type": "string" }, "bookingId": { "description": "Booking id", "type": "string" }, "blockId": { "description": "Block id", "type": "string" }, "groupName": { "description": "Name of the group", "type": "string" }, "status": { "description": "Status of the reservation", "enum": [ "Confirmed", "InHouse", "CheckedOut", "Canceled", "NoShow" ], "type": "string" }, "checkInTime": { "format": "date-time", "description": "Time of check-in
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "checkOutTime": { "format": "date-time", "description": "Time of check-out
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "cancellationTime": { "format": "date-time", "description": "Time of cancellation, if the reservation was canceled
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "noShowTime": { "format": "date-time", "description": "Time of setting no-show reservation status
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "unit": { "$ref": "#/definitions/EmbeddedUnitModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "arrival": { "format": "date-time", "description": "Date of arrival
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "format": "date-time", "description": "Date of departure
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "The ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "comment": { "description": "Additional information and comments", "type": "string" }, "guestComment": { "description": "Additional information and comment by the guest", "type": "string" }, "externalCode": { "description": "Code in external system", "type": "string" }, "channelCode": { "description": "Channel code", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" }, "source": { "description": "Source of the reservation (e.g Hotels.com, Orbitz, etc.)", "type": "string" }, "primaryGuest": { "$ref": "#/definitions/GuestModel" }, "additionalGuests": { "description": "Additional guests of the reservation.", "type": "array", "items": { "$ref": "#/definitions/GuestModel" } }, "booker": { "$ref": "#/definitions/BookerModel" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "guaranteeType": { "description": "The strongest guarantee for the rate plans booked in this reservation", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company", "Ota" ], "type": "string" }, "cancellationFee": { "$ref": "#/definitions/ReservationCancellationFeeModel" }, "noShowFee": { "$ref": "#/definitions/ReservationNoShowFeeModel" }, "travelPurpose": { "description": "The purpose of the trip, leisure or business", "enum": [ "Business", "Leisure" ], "type": "string" }, "balance": { "$ref": "#/definitions/MonetaryValueModel" }, "assignedUnits": { "description": "The list of units assigned to this reservation", "type": "array", "items": { "$ref": "#/definitions/ReservationAssignedUnitModel" } }, "timeSlices": { "description": "The list of time slices with the reserved units / unit groups for the stay", "type": "array", "items": { "$ref": "#/definitions/TimeSliceModel" } }, "services": { "description": "The list of additional services (extras, add-ons) reserved for the stay", "type": "array", "items": { "$ref": "#/definitions/ReservationServiceItemModel" } }, "validationMessages": { "description": "Validation rules are applied to reservations during their lifetime.\r\nFor example a reservation that was created while the house or unit group is already fully booked.\r\nWhenever a rule was or is currently violated, a validation message will be added to this list.\r\nThey can be deleted whenever the hotel staff worked them off.", "type": "array", "items": { "$ref": "#/definitions/ReservationValidationMessageModel" } }, "actions": { "description": "The list of actions for this reservation", "type": "array", "items": { "$ref": "#/definitions/ActionModel[ReservationAction,NotAllowedReservationActionReason]" } }, "company": { "$ref": "#/definitions/EmbeddedCompanyModel" }, "corporateCode": { "description": "Corporate code provided during creation. Used to find offers during amend.", "type": "string" }, "allFoliosHaveInvoice": { "description": "Whether all folios of a reservation have an invoice", "type": "boolean" }, "hasCityTax": { "description": "Whether the city tax has already been added to the reservation. Set to false, if the property does not have city tax configured", "type": "boolean" }, "commission": { "$ref": "#/definitions/CommissionModel" }, "promoCode": { "description": "The promo code associated with a certain special offer used to create the reservation", "type": "string" } } }, "ReservationListModel": { "required": [ "count", "reservations" ], "type": "object", "properties": { "reservations": { "description": "List of reservations", "type": "array", "items": { "$ref": "#/definitions/ReservationItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"reservations\": [\n {\n \"id\": \"XPGMSXGF-1\",\n \"bookingId\": \"XPGMSXGF\",\n \"status\": \"Confirmed\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"totalGrossAmount\": {\n \"amount\": 110.0,\n \"currency\": \"EUR\"\n },\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-24T17:00:00+01:00\",\n \"created\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"modified\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"adults\": 1,\n \"channelCode\": \"Direct\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 3\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"guaranteeType\": \"CreditCard\",\n \"cancellationFee\": {\n \"id\": \"MUC-NONREF\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"100% of the accommodation.\",\n \"dueDateTime\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"fee\": {\n \"amount\": 110.0,\n \"currency\": \"EUR\"\n }\n },\n \"noShowFee\": {\n \"id\": \"MUC-NOSHOW\",\n \"code\": \"NOSHOW\",\n \"name\": \"Non Refundable\",\n \"description\": \"No free no-show\",\n \"fee\": {\n \"amount\": 110.0,\n \"currency\": \"EUR\"\n }\n },\n \"timeSlices\": [\n {\n \"from\": \"2022-02-24T17:00:00+01:00\",\n \"to\": \"2022-02-25T17:00:00+01:00\",\n \"serviceDate\": \"2022-02-24\",\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"baseAmount\": {\n \"grossAmount\": 65.0,\n \"netAmount\": 60.75,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 86.0,\n \"currency\": \"EUR\"\n },\n \"includedServices\": [\n {\n \"service\": {\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRKF\",\n \"name\": \"Breakfast\",\n \"description\": \"Best breakfast on this side of the Weißwurstäquator.\"\n },\n \"serviceDate\": \"2022-02-24\",\n \"count\": 0,\n \"amount\": {\n \"grossAmount\": 9.99,\n \"netAmount\": 8.39,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"bookedAsExtra\": false\n }\n ]\n }\n ],\n \"company\": {\n \"id\": \"MUC-UMBRELLA\",\n \"code\": \"UMBRELLA\",\n \"name\": \"Umbrella Corp.\",\n \"canCheckOutOnAr\": false\n },\n \"corporateCode\": \"UMBRELLA-DBL\",\n \"allFoliosHaveInvoice\": false,\n \"hasCityTax\": false\n },\n {\n \"id\": \"APFDRQSX-1\",\n \"bookingId\": \"APFDRQSX\",\n \"status\": \"CheckedOut\",\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-FLEX-DBL\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Flexible\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.201\",\n \"description\": \"Standard room.\"\n },\n \"totalGrossAmount\": {\n \"amount\": 120.0,\n \"currency\": \"EUR\"\n },\n \"arrival\": \"2022-02-27T14:00:43.4854081+01:00\",\n \"departure\": \"2022-03-01T14:00:43.4854081+01:00\",\n \"created\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"modified\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"channelCode\": \"Direct\",\n \"primaryGuest\": {\n \"title\": \"Ms\",\n \"gender\": \"Female\",\n \"firstName\": \"Jane\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"jane.d@doe.com\",\n \"phone\": \"+4989123789\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"guaranteeType\": \"CreditCard\",\n \"cancellationFee\": {\n \"id\": \"MUC-FLEX\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation.\",\n \"dueDateTime\": \"2022-02-24T17:00:00+01:00\",\n \"fee\": {\n \"amount\": 120.0,\n \"currency\": \"EUR\"\n }\n },\n \"noShowFee\": {\n \"id\": \"MUC-NOSHOW\",\n \"code\": \"NOSHOW\",\n \"name\": \"Non Refundable\",\n \"description\": \"No free no-show\",\n \"fee\": {\n \"amount\": 120.0,\n \"currency\": \"EUR\"\n }\n },\n \"timeSlices\": [\n {\n \"from\": \"2022-02-27T14:00:43.4854081+01:00\",\n \"to\": \"2022-02-28T14:00:43.4854081+01:00\",\n \"serviceDate\": \"2022-02-27\",\n \"ratePlan\": {\n \"id\": \"MUC-FLEX-DBL\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Flexible\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.201\",\n \"description\": \"Standard room.\"\n },\n \"baseAmount\": {\n \"grossAmount\": 65.0,\n \"netAmount\": 60.75,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 86.0,\n \"currency\": \"EUR\"\n },\n \"includedServices\": [\n {\n \"service\": {\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRKF\",\n \"name\": \"Breakfast\",\n \"description\": \"Best breakfast on this side of the Weißwurstäquator.\"\n },\n \"serviceDate\": \"2022-02-27\",\n \"count\": 0,\n \"amount\": {\n \"grossAmount\": 9.99,\n \"netAmount\": 8.39,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"bookedAsExtra\": false\n }\n ]\n },\n {\n \"from\": \"2022-02-28T14:00:43.4854081+01:00\",\n \"to\": \"2022-03-01T14:00:43.4854081+01:00\",\n \"serviceDate\": \"2022-02-28\",\n \"ratePlan\": {\n \"id\": \"MUC-FLEX-DBL\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Flexible\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-JQI\",\n \"name\": \"A.201\",\n \"description\": \"Standard room.\"\n },\n \"baseAmount\": {\n \"grossAmount\": 65.0,\n \"netAmount\": 60.75,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 86.0,\n \"currency\": \"EUR\"\n },\n \"includedServices\": [\n {\n \"service\": {\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRKF\",\n \"name\": \"Breakfast\",\n \"description\": \"Best breakfast on this side of the Weißwurstäquator.\"\n },\n \"serviceDate\": \"2022-02-28\",\n \"count\": 0,\n \"amount\": {\n \"grossAmount\": 9.99,\n \"netAmount\": 8.39,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"bookedAsExtra\": false\n }\n ]\n }\n ],\n \"validationMessages\": [\n {\n \"category\": \"OfferNotAvailable\",\n \"code\": \"RatePlanRestrictionsViolated\",\n \"message\": \"The restrictions of the rate plan are not considered\"\n }\n ],\n \"allFoliosHaveInvoice\": false,\n \"hasCityTax\": false,\n \"commission\": {\n \"commissionAmount\": {\n \"amount\": 10.0,\n \"currency\": \"EUR\"\n },\n \"beforeCommissionAmount\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n }\n ],\n \"count\": 0\n}" }, "ReservationModel": { "required": [ "adults", "arrival", "balance", "bookingId", "cancellationFee", "channelCode", "created", "departure", "guaranteeType", "hasCityTax", "id", "modified", "noShowFee", "payableAmount", "property", "ratePlan", "status", "taxDetails", "totalGrossAmount", "unitGroup" ], "type": "object", "properties": { "id": { "description": "Reservation id", "type": "string" }, "bookingId": { "description": "Booking id", "type": "string" }, "blockId": { "description": "Block id", "type": "string" }, "groupName": { "description": "Name of the group", "type": "string" }, "status": { "description": "Status of the reservation", "enum": [ "Confirmed", "InHouse", "CheckedOut", "Canceled", "NoShow" ], "type": "string" }, "checkInTime": { "format": "date-time", "description": "Time of check-in
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "checkOutTime": { "format": "date-time", "description": "Time of check-out
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "cancellationTime": { "format": "date-time", "description": "Time of cancellation, if the reservation was canceled
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "noShowTime": { "format": "date-time", "description": "Time of setting no-show reservation status
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "unit": { "$ref": "#/definitions/EmbeddedUnitModel" }, "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "ratePlan": { "$ref": "#/definitions/EmbeddedRatePlanModel" }, "unitGroup": { "$ref": "#/definitions/EmbeddedUnitGroupModel" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "arrival": { "format": "date-time", "description": "Date of arrival
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "format": "date-time", "description": "Date of departure
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "created": { "format": "date-time", "description": "Date of creation
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "modified": { "format": "date-time", "description": "Date of last modification
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "adults": { "format": "int32", "description": "Number of adults", "type": "integer" }, "childrenAges": { "description": "The ages of the children", "type": "array", "items": { "format": "int32", "type": "integer" } }, "comment": { "description": "Additional information and comments", "type": "string" }, "guestComment": { "description": "Additional information and comment by the guest", "type": "string" }, "externalCode": { "description": "Code in external system", "type": "string" }, "channelCode": { "description": "Channel code", "enum": [ "Direct", "BookingCom", "Ibe", "ChannelManager", "Expedia", "Homelike", "Hrs" ], "type": "string" }, "source": { "description": "Source of the reservation (e.g Hotels.com, Orbitz, etc.)", "type": "string" }, "primaryGuest": { "$ref": "#/definitions/GuestModel" }, "additionalGuests": { "description": "Additional guests of the reservation.", "type": "array", "items": { "$ref": "#/definitions/GuestModel" } }, "booker": { "$ref": "#/definitions/BookerModel" }, "paymentAccount": { "$ref": "#/definitions/PaymentAccountModel" }, "timeSlices": { "description": "The list of time slices with the reserved units / unit groups for the stay", "type": "array", "items": { "$ref": "#/definitions/TimeSliceModel" } }, "services": { "description": "The list of additional services (extras, add-ons) reserved for the stay", "type": "array", "items": { "$ref": "#/definitions/ReservationServiceItemModel" } }, "guaranteeType": { "description": "The strongest guarantee for the rate plans booked in this reservation", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company", "Ota" ], "type": "string" }, "cancellationFee": { "$ref": "#/definitions/ReservationCancellationFeeModel" }, "noShowFee": { "$ref": "#/definitions/ReservationNoShowFeeModel" }, "travelPurpose": { "description": "The purpose of the trip, leisure or business", "enum": [ "Business", "Leisure" ], "type": "string" }, "balance": { "$ref": "#/definitions/MonetaryValueModel" }, "assignedUnits": { "description": "The list of units assigned to this reservation", "type": "array", "items": { "$ref": "#/definitions/ReservationAssignedUnitModel" } }, "validationMessages": { "description": "Validation rules are applied to reservations during their lifetime.\r\nFor example a reservation that was created while the house or unit group is already fully booked.\r\nWhenever a rule was or is currently violated, a validation message will be added to this list.\r\nThey can be deleted whenever the hotel staff worked them off.", "type": "array", "items": { "$ref": "#/definitions/ReservationValidationMessageModel" } }, "actions": { "description": "The list of actions for this reservation", "type": "array", "items": { "$ref": "#/definitions/ActionModel[ReservationAction,NotAllowedReservationActionReason]" } }, "company": { "$ref": "#/definitions/EmbeddedCompanyModel" }, "corporateCode": { "description": "Corporate code provided during creation. Used to find offers during amend.", "type": "string" }, "allFoliosHaveInvoice": { "description": "Whether all folios of a reservation have an invoice", "type": "boolean" }, "taxDetails": { "description": "Tax breakdown, displaying net and tax amount for each VAT type", "type": "array", "items": { "$ref": "#/definitions/TaxDetailModel" } }, "hasCityTax": { "description": "Whether the city tax has already been added to the reservation. Set to false, if the property does not have city tax configured", "type": "boolean" }, "commission": { "$ref": "#/definitions/CommissionModel" }, "promoCode": { "description": "The promo code associated with a certain special offer used to create the reservation", "type": "string" }, "payableAmount": { "$ref": "#/definitions/PayableAmountModel" } }, "example": "{\n \"id\": \"XPGMSXGF-1\",\n \"bookingId\": \"XPGMSXGF\",\n \"status\": \"Confirmed\",\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"totalGrossAmount\": {\n \"amount\": 222.0,\n \"currency\": \"EUR\"\n },\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-26T11:00:00+01:00\",\n \"created\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"modified\": \"2022-02-22T14:00:43.4854081+01:00\",\n \"adults\": 1,\n \"childrenAges\": [\n 6\n ],\n \"externalCode\": \"812864414|369\",\n \"channelCode\": \"BookingCom\",\n \"primaryGuest\": {\n \"title\": \"Mr\",\n \"gender\": \"Male\",\n \"firstName\": \"Jon\",\n \"middleInitial\": \"D\",\n \"lastName\": \"Doe\",\n \"email\": \"john.d@doe.com\",\n \"phone\": \"+4989123343\",\n \"address\": {\n \"addressLine1\": \"My Street 5\",\n \"postalCode\": \"12453\",\n \"city\": \"MyCity\",\n \"countryCode\": \"GB\"\n }\n },\n \"paymentAccount\": {\n \"accountNumber\": \"1111\",\n \"accountHolder\": \"John Doe\",\n \"expiryMonth\": \"8\",\n \"expiryYear\": \"2018\",\n \"paymentMethod\": \"visa\",\n \"payerEmail\": \"s.hopper@test.com\",\n \"isVirtual\": false,\n \"isActive\": false\n },\n \"timeSlices\": [\n {\n \"from\": \"2022-02-24T17:00:00+01:00\",\n \"to\": \"2022-02-25T11:00:00+01:00\",\n \"serviceDate\": \"2022-02-24\",\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"baseAmount\": {\n \"grossAmount\": 65.0,\n \"netAmount\": 60.75,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 86.0,\n \"currency\": \"EUR\"\n },\n \"includedServices\": [\n {\n \"service\": {\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRKF\",\n \"name\": \"Breakfast\",\n \"description\": \"Best breakfast on this side of the Weißwurstäquator.\"\n },\n \"serviceDate\": \"2022-02-25\",\n \"count\": 0,\n \"amount\": {\n \"grossAmount\": 9.99,\n \"netAmount\": 8.39,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"bookedAsExtra\": false\n }\n ]\n },\n {\n \"from\": \"2022-02-25T17:00:00+01:00\",\n \"to\": \"2022-02-26T11:00:00+01:00\",\n \"serviceDate\": \"2022-02-25\",\n \"ratePlan\": {\n \"id\": \"MUC-NONREF_DBL\",\n \"code\": \"NONREF\",\n \"name\": \"Non Refundable\",\n \"description\": \"Non Refundable\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-SGL\",\n \"code\": \"SGL\",\n \"name\": \"Standard\",\n \"description\": \"Standard\",\n \"type\": \"BedRoom\"\n },\n \"unit\": {\n \"id\": \"MUC-MTA\",\n \"name\": \"A.101\",\n \"description\": \"Standard room.\"\n },\n \"baseAmount\": {\n \"grossAmount\": 91.01,\n \"netAmount\": 85.06,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 101.0,\n \"currency\": \"EUR\"\n },\n \"includedServices\": [\n {\n \"service\": {\n \"id\": \"MUC-BRKF\",\n \"code\": \"BRKF\",\n \"name\": \"Breakfast\",\n \"description\": \"Best breakfast on this side of the Weißwurstäquator.\"\n },\n \"serviceDate\": \"2022-02-26\",\n \"count\": 0,\n \"amount\": {\n \"grossAmount\": 9.99,\n \"netAmount\": 8.39,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"bookedAsExtra\": false\n }\n ]\n }\n ],\n \"guaranteeType\": \"CreditCard\",\n \"cancellationFee\": {\n \"id\": \"MUC-FLEX\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Free cancellation.\",\n \"dueDateTime\": \"2022-02-24T17:00:00+01:00\",\n \"fee\": {\n \"amount\": 202.0,\n \"currency\": \"EUR\"\n }\n },\n \"noShowFee\": {\n \"id\": \"MUC-NOSHOW\",\n \"code\": \"NOSHOW\",\n \"name\": \"Non Refundable\",\n \"description\": \"No free no-show\",\n \"fee\": {\n \"amount\": 202.0,\n \"currency\": \"EUR\"\n }\n },\n \"validationMessages\": [\n {\n \"category\": \"OfferNotAvailable\",\n \"code\": \"RatePlanRestrictionsViolated\",\n \"message\": \"The restrictions of the rate plan are not considered\"\n }\n ],\n \"company\": {\n \"id\": \"MUC-UMBRELLA\",\n \"code\": \"UMBRELLA\",\n \"name\": \"Umbrella Corp.\",\n \"canCheckOutOnAr\": false\n },\n \"corporateCode\": \"UMBRELLA_DBL\",\n \"allFoliosHaveInvoice\": false,\n \"hasCityTax\": true,\n \"commission\": {\n \"commissionAmount\": {\n \"amount\": 10.0,\n \"currency\": \"EUR\"\n },\n \"beforeCommissionAmount\": {\n \"amount\": 100.0,\n \"currency\": \"EUR\"\n }\n }\n}" }, "ReservationNoShowFeeModel": { "required": [ "code", "description", "fee", "id", "name" ], "type": "object", "properties": { "id": { "description": "The id of the no-show policy applied", "type": "string" }, "code": { "description": "The code of the no-show policy applied", "type": "string" }, "name": { "description": "The name of the no-show policy applied", "type": "string" }, "description": { "description": "The description of the no-show policy applied", "type": "string" }, "fee": { "$ref": "#/definitions/MonetaryValueModel" } } }, "ReservationsCreatedModel": { "required": [ "reservationIds" ], "type": "object", "properties": { "reservationIds": { "description": "List of ids for newly created reservations", "type": "array", "items": { "$ref": "#/definitions/ReservationCreatedModel" } } }, "example": "{\n \"reservationIds\": [\n {\n \"id\": \"XPGMSXGF-1\"\n },\n {\n \"id\": \"XPGMSXGF-2\"\n }\n ]\n}" }, "ReservationServiceItemModel": { "required": [ "dates", "service", "totalAmount" ], "type": "object", "properties": { "service": { "$ref": "#/definitions/ServiceModel" }, "totalAmount": { "$ref": "#/definitions/AmountModel" }, "dates": { "description": "The dates the service will be delivered with its price", "type": "array", "items": { "$ref": "#/definitions/ServiceDateItemModel" } } } }, "ReservationServiceListModel": { "required": [ "count", "services" ], "type": "object", "properties": { "services": { "description": "The list of services booked for the reservation", "type": "array", "items": { "$ref": "#/definitions/ReservationServiceItemModel" } }, "count": { "format": "int64", "description": "Total count of items", "type": "integer" } }, "example": "{\n \"services\": [\n {\n \"service\": {\n \"id\": \"MUC-YOGA\",\n \"code\": \"YOGA\",\n \"name\": \"Sun Salutation\",\n \"description\": \"Start the day with a private Yoga session with one of our certified trainers.\",\n \"pricingUnit\": \"Person\",\n \"defaultGrossPrice\": {\n \"amount\": 35.0,\n \"currency\": \"EUR\"\n }\n },\n \"totalAmount\": {\n \"grossAmount\": 30.0,\n \"netAmount\": 25.0,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"dates\": [\n {\n \"serviceDate\": \"2022-02-22\",\n \"count\": 1,\n \"amount\": {\n \"grossAmount\": 30.0,\n \"netAmount\": 25.0,\n \"vatType\": \"Normal\",\n \"vatPercent\": 19.0,\n \"currency\": \"EUR\"\n },\n \"isMandatory\": false\n }\n ]\n }\n ],\n \"count\": 1\n}" }, "ReservationServiceModel": { "required": [ "amount", "bookedAsExtra", "count", "service", "serviceDate" ], "type": "object", "properties": { "service": { "$ref": "#/definitions/EmbeddedServiceModel" }, "serviceDate": { "format": "date", "description": "The date this service is delivered", "type": "string", "example": "2020-10-10" }, "count": { "format": "int32", "description": "The count of booked services", "type": "integer" }, "amount": { "$ref": "#/definitions/AmountModel" }, "bookedAsExtra": { "description": "Whether this service is already booked as extra", "type": "boolean" } } }, "ReservationStayOfferModel": { "required": [ "arrival", "availableUnits", "cancellationFee", "departure", "isCorporate", "minGuaranteeType", "noShowFee", "taxDetails", "timeSlices", "totalGrossAmount" ], "type": "object", "properties": { "arrival": { "format": "date-time", "description": "The earliest arrival date and time for this offer
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "departure": { "format": "date-time", "description": "The latest departure date and time for this offer
A date and time (without fractional second part) in UTC or with UTC offset as defined in ISO8601:2004", "type": "string" }, "minGuaranteeType": { "description": "The minimum guarantee type for this offer", "enum": [ "PM6Hold", "CreditCard", "Prepayment", "Company" ], "type": "string" }, "availableUnits": { "format": "int32", "description": "The number of available units for that offer", "type": "integer" }, "totalGrossAmount": { "$ref": "#/definitions/MonetaryValueModel" }, "cancellationFee": { "$ref": "#/definitions/OfferCancellationFeeModel" }, "noShowFee": { "$ref": "#/definitions/OfferNoShowFeeModel" }, "timeSlices": { "description": "The breakdown for each time slice for this offer", "type": "array", "items": { "$ref": "#/definitions/ReservationStayOfferTimeSliceModel" } }, "services": { "description": "The breakdown for extra services reserved for this offer", "type": "array", "items": { "$ref": "#/definitions/ServiceOfferModel" } }, "taxDetails": { "description": "Tax breakdown, displaying net and tax amount for each VAT type", "type": "array", "items": { "$ref": "#/definitions/TaxDetailModel" } }, "validationMessages": { "description": "Validation rules that were applied to the offer and show the reason why the offer is not bookable", "type": "array", "items": { "$ref": "#/definitions/OfferValidationMessageModel" } }, "companyId": { "description": "ID of the company the offer is created for", "type": "string" }, "corporateCode": { "description": "The corporate rate code the offer is created for", "type": "string" }, "isCorporate": { "description": "Whether the offer is for a corporate rate plan", "type": "boolean" }, "cityTax": { "$ref": "#/definitions/AmountModel" }, "cityTaxes": { "description": "Details of city taxes for this offer, if any", "type": "array", "items": { "$ref": "#/definitions/OfferCityTaxModel" } } } }, "ReservationStayOfferServiceModel": { "required": [ "amount", "bookedAsExtra", "count", "pricingMode", "service", "serviceDate" ], "type": "object", "properties": { "service": { "$ref": "#/definitions/EmbeddedServiceModel" }, "serviceDate": { "format": "date", "description": "The date this service is delivered", "type": "string", "example": "2020-10-10" }, "count": { "format": "int32", "description": "The default count of offered services. For services whose pricing unit is 'Person' it will be based on the adults and children specified, otherwise 1.", "type": "integer" }, "availableCount": { "format": "int32", "description": "If set - the number of services available (only for the limited service).\r\nIf not set - the service is unlimited.", "type": "integer" }, "amount": { "$ref": "#/definitions/AmountModel" }, "bookedAsExtra": { "description": "Whether this service is already booked as extra", "type": "boolean" }, "pricingMode": { "description": "Whether the service price is included in or added to the base rate", "enum": [ "Included", "Additional" ], "type": "string" } } }, "ReservationStayOffersModel": { "required": [ "offers", "property" ], "type": "object", "properties": { "property": { "$ref": "#/definitions/EmbeddedPropertyModel" }, "offers": { "description": "List of offered unit groups with rates", "type": "array", "items": { "$ref": "#/definitions/ReservationStayOfferModel" } } }, "example": "{\n \"property\": {\n \"id\": \"MUC\",\n \"code\": \"MUC\",\n \"name\": \"Demo Hotel Munich\",\n \"description\": \"This is the demo hotel Munich\"\n },\n \"offers\": [\n {\n \"arrival\": \"2022-02-24T17:00:00+01:00\",\n \"departure\": \"2022-02-26T11:00:00+01:00\",\n \"minGuaranteeType\": \"PM6Hold\",\n \"availableUnits\": 4,\n \"totalGrossAmount\": {\n \"amount\": 214.0,\n \"currency\": \"EUR\"\n },\n \"timeSlices\": [\n {\n \"from\": \"2022-02-24T17:00:00+01:00\",\n \"to\": \"2022-02-25T11:00:00+01:00\",\n \"ratePlan\": {\n \"id\": \"MUC-FLEX-DBL\",\n \"code\": \"FLEX\",\n \"name\": \"Flexible\",\n \"description\": \"Flexible\",\n \"isSubjectToCityTax\": false\n },\n \"unitGroup\": {\n \"id\": \"MUC-DBL\",\n \"code\": \"DBL\",\n \"name\": \"Double\",\n \"description\": \"Double\",\n \"maxPersons\": 2,\n \"rank\": 1,\n \"type\": \"BedRoom\"\n },\n \"baseAmount\": {\n \"grossAmount\": 40.00,\n \"netAmount\": 37.38,\n \"vatType\": \"Reduced\",\n \"vatPercent\": 7.0,\n \"currency\": \"EUR\"\n },\n \"totalGrossAmount\": {\n \"amount\": 50.00,\n \"cu