diff --git a/rest-api-specs/distribution/distributionauthentication.json b/rest-api-specs/distribution/distributionauthentication.json index 448ee09..dc61b0e 100644 --- a/rest-api-specs/distribution/distributionauthentication.json +++ b/rest-api-specs/distribution/distributionauthentication.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "OPERA Cloud Distribution Authentication API", - "version": "24.3", - "description": "
API to obtain the access token (in the JWT format) that matches the provided credentials issued by the Oracle Hospitality Distribution administrator for a specific Distribution channel partner. The token will then be used by API users to access OPERA Cloud Distribution APIS. Once a token is created, it can be used in multiple subsequent calls until it expires as defined in this API response.
\nUsername for a channel partner Distribution API account is provisioned by an Oracle administrator at the channel level. It is not an OPERA Cloud (PMS) user and not created or approved by the hotelier. Additionally, for each property, the hotelier will need to enable the channel so that it can access data for their specific hotel in the reservation context.
\nMore information on how to request a username and temporary password for a registered channel for Distribution APIs:\n
This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2024 Oracle and/or its affiliates.
", + "version": "25.1.0.0", + "description": "API to obtain the access token (in the JWT format) that matches the provided credentials issued by the Oracle Hospitality Distribution administrator for a specific Distribution channel partner. The token will then be used by API users to access OPERA Cloud Distribution APIS. Once a token is created, it can be used in multiple subsequent calls until it expires as defined in this API response.
\nUsername for a channel partner Distribution API account is provisioned by an Oracle administrator at the channel level. It is not an OPERA Cloud (PMS) user and not created or approved by the hotelier. Additionally, for each property, the hotelier will need to enable the channel so that it can access data for their specific hotel in the reservation context.
\nMore information on how to request a username and temporary password for a registered channel for Distribution APIs:\n
This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", "x-summary": "HDP edge service applying pre authorization and pre routing logic. Example: curl --request POST https://HOSTNAME/hdpba/oauth2/v0/token --header 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --header 'Accept: */*' --data-urlencode 'username=USERNAME' --data-urlencode 'password=USERPASSWORD'", "termsOfService": "https://www.oracle.com/legal/terms.html", "contact": { diff --git a/rest-api-specs/distribution/distributioncontent.json b/rest-api-specs/distribution/distributioncontent.json new file mode 100644 index 0000000..a9d181f --- /dev/null +++ b/rest-api-specs/distribution/distributioncontent.json @@ -0,0 +1,1968 @@ +{ + "swagger": "2.0", + "info": { + "title": "OPERA Cloud Distribution Content", + "description": "Oracle Hospitality Distribution Content is for distribution partners to retrieve property Channel content information.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", + "contact": { + "email": "hospitality_apis_ww_grp@oracle.com" + }, + "license": { + "name": "UPL", + "url": "https://opensource.org/licenses/upl" + }, + "termsOfService": "https://www.oracle.com/legal/terms.html" + }, + "basePath": "/content/v1", + "schemes": [ + "https" + ], + "produces": [ + "application/json; charset=utf-8" + ], + "paths": { + "/hotels": { + "get": { + "summary": "Properties Summary", + "description": "Retrieve list of property information for all properties actively mapped to a single channel code.OperationId:getPropertiesSummary
", + "operationId": "getPropertiesSummary", + "tags": [ + "Content" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/x-request-id" + }, + { + "$ref": "#/parameters/connectionStatusLastChangedFrom" + }, + { + "$ref": "#/parameters/connectionStatusLastChangedTo" + }, + { + "$ref": "#/parameters/connectionStatus" + }, + { + "$ref": "#/parameters/fetchInstructions" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "Response object for property info", + "schema": { + "$ref": "#/definitions/PropertyInfoSummaryResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + }, + "/hotels/{hotelCode}": { + "get": { + "summary": "Property Information", + "description": "Retrieve property information for a single property.OperationId:getPropertyInfo
", + "operationId": "getPropertyInfo", + "tags": [ + "Content" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/x-request-id" + }, + { + "$ref": "#/parameters/HotelCode" + } + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "Response object for property info", + "schema": { + "$ref": "#/definitions/PropertyInfoResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + }, + "/hotels/{hotelCode}/roomTypes": { + "get": { + "summary": "Room Types Information", + "description": "Retrieve room types information for a single property.OperationId:getRoomTypesInfo
", + "operationId": "getRoomTypesInfo", + "tags": [ + "Content" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/x-request-id" + }, + { + "$ref": "#/parameters/HotelCode" + }, + { + "$ref": "#/parameters/includeRoomAmenities" + }, + { + "$ref": "#/parameters/roomType" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "Response object for roomTypes info", + "schema": { + "$ref": "#/definitions/RoomTypesResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + }, + "/hotels/{hotelCode}/ratePlans": { + "get": { + "summary": "Rate Plans Information", + "description": "Retrieve rate plans information for a single property.OperationId:getRatePlans
", + "operationId": "getRatePlansInfo", + "tags": [ + "Content" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/x-request-id" + }, + { + "$ref": "#/parameters/HotelCode" + }, + { + "$ref": "#/parameters/includeNegotiatedRates" + }, + { + "$ref": "#/parameters/ratePlanCode" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "Response object for property info", + "schema": { + "$ref": "#/definitions/RatePlansResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + }, + "/hotels/{hotelCode}/rateRooms": { + "get": { + "summary": "Rate Rooms Information", + "description": "Retrieve rate plan and room type mapping information for a single property.OperationId:getRateRooms
", + "operationId": "getRateRooms", + "tags": [ + "Content" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/x-request-id" + }, + { + "$ref": "#/parameters/HotelCode" + }, + { + "$ref": "#/parameters/includeInactive" + }, + { + "$ref": "#/parameters/roomType" + }, + { + "$ref": "#/parameters/ratePlanCode" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "Response object for property info", + "schema": { + "$ref": "#/definitions/RateRoomsResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + } + }, + "parameters": { + "authorization": { + "name": "authorization", + "description": "Bearer token that needs to be passed which is generated post user\n authentication", + "type": "string", + "in": "header", + "required": true + }, + "x-channelCode": { + "name": "x-channelCode", + "in": "header", + "description": "Channel code", + "type": "string", + "minLength": 1, + "maxLength": 50, + "required": true, + "x-example": "CH1" + }, + "x-app-key": { + "name": "x-app-key", + "description": "Client or Partner's Application Key", + "type": "string", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$", + "in": "header", + "required": false + }, + "x-request-id": { + "name": "x-request-id", + "in": "header", + "description": "Unique tracing key e.g. 4664ab3423434a45", + "type": "string", + "required": false, + "x-example": "4664ab3423434a45" + }, + "HotelCode": { + "name": "hotelCode", + "in": "path", + "description": "Hotel Code", + "type": "string", + "minLength": 1, + "maxLength": 50, + "required": true, + "x-example": "XUSXXYY99" + }, + "includeRoomAmenities": { + "name": "includeRoomAmenities", + "in": "query", + "description": "If true include room amenities along with each room type. Default is False", + "type": "boolean", + "required": false, + "default": false, + "x-example": false + }, + "connectionStatusLastChangedFrom": { + "name": "connectionStatusLastChangedFrom", + "in": "query", + "description": "Channel connection status last changed after this time", + "type": "string", + "format": "date-time", + "required": false, + "x-example": "2022-01-02T11:30:22.234Z" + }, + "connectionStatusLastChangedTo": { + "name": "connectionStatusLastChangedTo", + "in": "query", + "description": "Channel connection status last changed before this time", + "type": "string", + "format": "date-time", + "required": false, + "x-example": "2022-01-02T11:30:22.234Z" + }, + "connectionStatus": { + "name": "connectionStatus", + "in": "query", + "type": "string", + "description": "Channel connection status", + "required": false, + "enum": [ + "TEST", + "ACTIVE", + "MAINTENANCE" + ] + }, + "fetchInstructions": { + "name": "fetchInstructions", + "in": "query", + "type": "string", + "description": "The optional summary sections to be included in the response", + "required": false, + "enum": [ + "ConnectionInformation" + ] + }, + "limit": { + "name": "limit", + "description": "Integer, the maximal number of item entities to be returned", + "type": "integer", + "in": "query", + "required": false, + "x-example": 40, + "minimum": 1, + "maximum": 100, + "default": 20 + }, + "offset": { + "name": "offset", + "description": "Non-negative integer values that specifies the index of the first item to be returned. The offset index begins at 0. By default, the offset is 0, which returns all items starting from the first item in the collection", + "type": "integer", + "in": "query", + "required": false, + "minimum": 0, + "x-example": 1, + "default": 0 + }, + "includeInactive": { + "name": "includeInactive", + "in": "query", + "description": "If true include inactive rateRooms. Default is False", + "type": "boolean", + "required": false, + "default": false, + "x-example": false + }, + "roomType": { + "name": "roomType", + "in": "query", + "description": "Room Type", + "type": "string", + "minLength": 1, + "maxLength": 20, + "required": false, + "x-example": "XA1K" + }, + "ratePlanCode": { + "name": "ratePlanCode", + "in": "query", + "description": "Rate Plan code", + "type": "string", + "minLength": 1, + "maxLength": 20, + "required": false, + "x-example": "XDAILY" + }, + "includeNegotiatedRates": { + "name": "includeNegotiatedRates", + "in": "query", + "description": "Set this true to include Negotiated rate plans along with public rate plans. Default is False", + "type": "boolean", + "required": false, + "default": false, + "x-example": false + } + }, + "definitions": { + "Address": { + "type": "object", + "properties": { + "addressLine": { + "description": "The property's street address", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 2, + "example": [ + "Street 123", + "Box 1" + ] + }, + "countryCode": { + "description": "The property's two letter ISO country code", + "type": "string", + "example": "US" + }, + "cityName": { + "description": "The city where the property is located", + "type": "string", + "example": "Miami" + }, + "stateProv": { + "description": "The state where the property is located", + "type": "string", + "example": "Florida" + }, + "postalCode": { + "description": "The property's postal (ZIP) code", + "type": "string", + "example": "90210" + } + } + }, + "AlternatePropertyDistance": { + "type": "object", + "properties": { + "distance": { + "type": "number", + "format": "double", + "description": "Distance from hotel to alternate property", + "example": 12, + "minimum": 0.01 + }, + "distanceUnit": { + "type": "string", + "description": "Measured Distance Unit from hotel to alternate property", + "$ref": "#/definitions/DistanceUnit" + }, + "compassDirection": { + "type": "string", + "description": "Relative direction from hotel to alternate property", + "$ref": "#/definitions/CompassDirection" + }, + "comments": { + "type": "string", + "description": "Free text comment provided by the user for the alternate property", + "example": "Resort3 is the next pereferred hotel after Resort1." + } + } + }, + "Communications": { + "description": "The contact information for the property", + "type": "object", + "properties": { + "phones": { + "description": "List of phone numbers for the property", + "type": "array", + "items": { + "$ref": "#/definitions/Phone" + }, + "minItems": 1 + }, + "emails": { + "description": "List of emails addresses for the property", + "type": "array", + "items": { + "$ref": "#/definitions/Email" + } + }, + "urls": { + "description": "List of urls for the property", + "type": "array", + "items": { + "$ref": "#/definitions/Url" + } + } + } + }, + "CompassDirection": { + "type": "string", + "enum": [ + "N", + "NE", + "E", + "SE", + "S", + "SW", + "W", + "NW" + ], + "description": "Relative direction from hotel to alternate property" + }, + "ContentRatePlan": { + "type": "object", + "properties": { + "hotelRatePlanCode": { + "type": "string", + "example": "DAILY", + "description": "A rate plan code for a hotel." + }, + "ratePlanCode": { + "type": "string", + "example": "XDAILY", + "description": "A code for a rate plan for a requested channel." + }, + "active": { + "type": "boolean", + "example": true, + "description": "It represent if the rate is active or inactive." + }, + "taxInclusive": { + "description": "It represents whether rate is tax Inclusive or not.", + "type": "boolean", + "example": true + }, + "currencyCode": { + "type": "string", + "description": "currency code", + "pattern": "[a-zA-Z]{3}", + "example": "USD" + }, + "negotiated": { + "description": "if the rate plan is negotiated or not", + "type": "boolean" + }, + "ratePlanType": { + "type": "string", + "description": "Code of the Channel Rate Plan Type", + "example": 10 + }, + "ratePlanName": { + "description": "Rate Plan Name", + "type": "string" + }, + "identificationRequired": { + "type": "boolean", + "description": "Indicates if an ID is required during the Check-In for this rate booking" + }, + "ratePlanLevel": { + "type": "string", + "description": "The rate level associated with the rate code" + }, + "ratePlanCategory": { + "type": "string", + "description": "The rate category associated with the rate plan code" + }, + "gdsDescription": { + "type": "object", + "$ref": "#/definitions/Description" + }, + "mealPlan": { + "description": "Type of meal plan the rate plan includes", + "type": "object", + "$ref": "#/definitions/OfferMealPlan" + } + } + }, + "Description": { + "type": "object", + "properties": { + "line1": { + "type": "string" + }, + "line2": { + "type": "string" + }, + "line3": { + "type": "string" + }, + "detailedDescription": { + "type": "string" + } + } + }, + "Direction": { + "type": "object", + "properties": { + "propertyDirection": { + "type": "string", + "maxLength": 1024, + "example": "SE ABC hills" + } + } + }, + "DistanceUnit": { + "type": "string", + "enum": [ + "Kilometers", + "Miles" + ], + "description": "Distance unit of measure" + }, + "Email": { + "type": "object", + "properties": { + "emailType": { + "description": "The email type", + "type": "string" + }, + "email": { + "description": "The email address for the specific emailType", + "type": "string" + } + } + }, + "ExceptionDetail": { + "description": "Common Error Response format", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Short, human-readable summary of the problem. The summary SHOULD NOT change for subsequent occurrences of the problem, except for purposes of localization.", + "example": "Error in Application" + }, + "status": { + "type": "integer", + "description": "HTTP status code for this occurrence of the problem, set by the origin server.", + "example": 400 + }, + "o:errorCode": { + "type": "string", + "description": "Business specific Error code, which is different from HTTP error code.", + "example": "RSV-34534534" + }, + "type": { + "type": "string", + "description": "Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem.", + "example": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The UTC Date and Time of the Error happened.", + "example": "2022-01-02T11:30:22.234Z" + }, + "o:errorDetails": { + "description": "Details of the error message, consisting of a hierarchical tree structure", + "type": "array", + "items": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "logId": { + "type": "integer", + "description": "An ID for support reasons to be able identify errors better.", + "example": "334543532224" + } + } + }, + "GeneralInformation": { + "type": "object", + "properties": { + "checkInTime": { + "type": "string", + "pattern": "^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$", + "example": "04:30" + }, + "checkOutTime": { + "type": "string", + "pattern": "^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$", + "example": "14:30" + } + } + }, + "Location": { + "type": "object", + "properties": { + "propertyLocation": { + "type": "string", + "maxLength": 1024, + "example": "ABC hills" + } + } + }, + "OfferDetailsPropertyInfoSummary": { + "description": "Property information", + "type": "object", + "properties": { + "hotelId": { + "type": "string", + "description": "Unique ID that identifies a single hotel property", + "example": "Hotel1" + }, + "hotelCode": { + "type": "string", + "description": "The external Hotel/property Id for a channel", + "example": "XUSXXYY99" + }, + "hotelName": { + "type": "string", + "description": "The descriptive name of a property", + "example": "The Palmyra Resort" + }, + "chainCode": { + "type": "string", + "description": "Channel chain code for a property", + "example": "CHAIN1" + }, + "brandCode": { + "type": "string", + "description": "Channel's hotel/property brand code", + "example": "BRAND1" + }, + "startDate": { + "type": "string", + "description": "The date this property will be active for the channel", + "format": "date", + "example": "2023-08-03" + }, + "endDate": { + "type": "string", + "description": "The date this property will be deactivate for the channel", + "format": "date", + "example": "2024-09-04" + }, + "address": { + "description": "Address Details such as city, state, country, postal code etc for a hotel property", + "$ref": "#/definitions/Address" + }, + "communications": { + "description": "The contact information for the property", + "$ref": "#/definitions/Communications" + }, + "connectionInformation": { + "description": "The connection information for the channel", + "$ref": "#/definitions/ConnectionInformation" + } + } + }, + "ConnectionInformation": { + "description": "Channel Connection Information for the hotel property", + "type": "object", + "properties": { + "connectionStatus": { + "type": "string", + "description": "Channel connection status", + "enum": [ + "TEST", + "ACTIVE", + "MAINTENANCE" + ] + }, + "connectionStatusLastChangedOn": { + "description": "Channel connection status last changed on this date time", + "type": "string", + "format": "date-time", + "example": "2022-01-02T11:30:22.234Z" + }, + "defaultARIMessageFormat": { + "type": "string", + "description": "ARI message format", + "enum": [ + "Oracle_v1", + "AdsRateUpdate", + "AdsRateAmount" + ], + "example": "Oracle_v1" + }, + "channelRoutes": { + "description": "The web service location (URL) of the distribution partners where Oracle Hospitality Distribution ARI service will post messages such as the property inventory, restrictions/availability, rate schedules updates, etc.", + "type": "array", + "items": { + "$ref": "#/definitions/ChannelRouteType" + } + } + } + }, + "ContentPropertyInfo": { + "description": "Property information", + "type": "object", + "properties": { + "hotelId": { + "type": "string", + "description": "Unique ID that identifies a single hotel property", + "example": "Hotel1" + }, + "enterpriseId": { + "type": "string", + "description": "The Enterprise ID of the property it belongs to", + "example": "Hotel1" + }, + "hotelCode": { + "type": "string", + "description": "A channel hotel code", + "example": "XUSXXYY99" + }, + "hotelName": { + "type": "string", + "description": "A full name of a hotel", + "example": "Resort1" + }, + "hotelDescription": { + "type": "string", + "description": "Description of a hotel" + }, + "chainCode": { + "type": "string", + "description": "Channel chain code for a property", + "example": "CHAIN1" + }, + "clusterCode": { + "type": "string", + "description": "Code of the cluster", + "minLength": 1, + "maxLength": 8, + "pattern": "[A-Z0-9_]*", + "example": "CLU123" + }, + "address": { + "type": "object", + "$ref": "#/definitions/Address" + }, + "latitude": { + "type": "number", + "description": "Latitude of a hotel", + "format": "double", + "example": 15 + }, + "longitude": { + "type": "number", + "description": "Longitude of a hotel", + "format": "double", + "example": 40 + }, + "propertyAmenities": { + "type": "array", + "items": { + "$ref": "#/definitions/PropertyOffersHotelAmenity" + } + }, + "pointOfInterest": { + "type": "array", + "items": { + "$ref": "#/definitions/OfferPointOfInterest" + } + }, + "marketingMessage": { + "type": "string", + "description": "Property level marketing message.", + "example": "Thank you for choosing our property." + }, + "currencyCode": { + "type": "string", + "description": "currency code", + "pattern": "[a-zA-Z]{3}", + "example": "USD" + }, + "primaryLanguage": { + "description": "Primary Language spoken at the property", + "type": "string", + "example": "en-us" + }, + "totalNumberOfRooms": { + "description": "The total number of guest rooms for the property", + "type": "integer", + "example": 5 + }, + "petPolicy": { + "type": "string", + "description": "Hotel pet policy.", + "enum": [ + "Pets allowed", + "Pets not allowed", + "Assistive animals only", + "Pets by arrangement", + "Other_" + ] + }, + "hotelChildPolicy": { + "$ref": "#/definitions/HotelChildPolicy" + }, + "timeZone": { + "$ref": "#/definitions/TimeZone" + }, + "generalInformation": { + "type": "object", + "$ref": "#/definitions/GeneralInformation" + }, + "communications": { + "type": "object", + "$ref": "#/definitions/Communications" + }, + "transportations": { + "type": "array", + "items": { + "$ref": "#/definitions/Transportation" + } + }, + "direction": { + "type": "object", + "$ref": "#/definitions/Direction" + }, + "location": { + "type": "object", + "$ref": "#/definitions/Location" + } + } + }, + "OfferMealPlan": { + "type": "object", + "properties": { + "mealPlanCode": { + "description": "The meal plan code", + "type": "string", + "example": "1" + }, + "mealPlanDescription": { + "description": "The meal plan description", + "type": "string", + "example": "All inclusive meal plan" + }, + "mealsIncluded": { + "description": "Type of meal plan", + "type": "array", + "items": { + "$ref": "#/definitions/OfferRatePlanMealType" + } + } + } + }, + "OfferPointOfInterest": { + "type": "object", + "description": "The point of interest for guests to get to the hotel.", + "properties": { + "name": { + "type": "string", + "description": "The name of the point of interest.", + "example": "Dallas airport, Park" + }, + "pointOfInterestType": { + "type": "string", + "description": "The point of interest type available to choose.", + "example": "AIRPORT", + "enum": [ + "AIRPORT", + "ATTRACTIONS" + ] + }, + "description": { + "description": "The description of the point of interest.", + "type": "string" + }, + "airportCode": { + "description": "The unique 3 letter IATA code to identify the airport.", + "type": "string", + "example": "DAL" + }, + "distance": { + "description": "The distance from the point of interest to the hotel", + "type": "number", + "format": "double", + "example": 6 + }, + "distanceUnit": { + "description": "Unit of measurement for the distance", + "type": "string", + "example": "Kilometers" + }, + "attractionDirection": { + "description": "The attraction direction from point of interest to the hotel.", + "type": "string", + "example": "N", + "enum": [ + "N", + "W", + "S", + "E", + "NW", + "NE", + "SW", + "SE" + ] + }, + "transportation": { + "description": "The transportation type for the chosen point of interest.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "objId" + ] + }, + "directionDescription": { + "description": "The description for how to get from point of interest to the hotel.", + "type": "string", + "example": "Free text to describe route from property to attraction" + }, + "drivingTime": { + "description": "The driving time it will take to get from point of interest to the hotel.", + "type": "number", + "format": "double", + "example": 3.5 + } + } + }, + "OfferRatePlanMealType": { + "type": "string", + "enum": [ + "Breakfast", + "Lunch", + "Dinner" + ], + "description": "Type of meal the rate plan includes" + }, + "Phone": { + "type": "object", + "properties": { + "phoneTechType": { + "description": "The type of technology associated with the telephone number", + "type": "string" + }, + "phoneLocationType": { + "description": "Describes the location of the phone", + "type": "string" + }, + "phoneNumber": { + "description": "The phone number assigned to a specific location", + "type": "string" + } + } + }, + "PostingRhythmType": { + "type": "string", + "description": "Frequency type for posting types.EveryNight - Charge posted every night of the stay
ArrivalNight - Charge posted only on arrival night
EveryXNightsStartingNightY - Charge posted every X nights, beginning the Y night of stay
CertainNightsOfTheWeek - Charge posted on certain night of the stay determined by the property
LastNight - Charge posted only on the last night of the stay
EveryNightExceptArrivalNight - Charge posted on all nights of the stay except the arrival night
EveryNightExceptLast - Charge posted on all nights of the stay except the last night
EveryNightExceptFirstAndLast - Charge posted on all nights of the stay except the first and last nights of the stay
CustomStaySchedule - Charge posted on stays determined by the property
CustomNightSchedule - Charge posted on nights of the stay determined by the property
FloatingAllowancePerStay - Allows for the package allowance to be consumed at anytime during the stay
TicketPosting - Charge posted immediately when a successful response is received back from the ticketing vendor (requires interface with a vendor)", + "enum": [ + "EveryNight", + "ArrivalNight", + "EveryXNightsStartingNightY", + "CertainNightsOfTheWeek", + "LastNight", + "EveryNightExceptArrivalNight", + "EveryNightExceptLast", + "EveryNightExceptFirstAndLast", + "CustomStaySchedule", + "CustomNightSchedule", + "FloatingAllowancePerStay", + "TicketPosting" + ] + }, + "PropertyInfoSummaryResponse": { + "type": "object", + "properties": { + "hasMore": { + "type": "boolean", + "description": "Boolean value that is set to true if more resources are available on the server than the subset returned in current page.", + "example": true + }, + "totalResults": { + "type": "integer", + "description": "Total count of the resource instances, including both the instances in the current range and the instances on the server that satisfy the request.", + "example": 100 + }, + "limit": { + "type": "integer", + "description": "Actual paging size used by the server.", + "example": 100 + }, + "count": { + "type": "integer", + "description": "Number of resource instances returned in the current range.", + "example": 100 + }, + "offset": { + "type": "integer", + "description": "Offset value used in the current page.", + "example": 1 + }, + "hotels": { + "type": "array", + "items": { + "$ref": "#/definitions/OfferDetailsPropertyInfoSummary" + } + } + } + }, + "PropertyInfoResponse": { + "type": "object", + "properties": { + "propertyInfo": { + "$ref": "#/definitions/ContentPropertyInfo" + } + } + }, + "PropertyOffersPropertyInfo": { + "description": "Property information", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/PropertySearchPropertyInfo" + }, + { + "type": "object", + "properties": { + "address": { + "type": "object", + "$ref": "#/definitions/Address" + }, + "distance": { + "type": "object", + "$ref": "#/definitions/AlternatePropertyDistance" + }, + "propertyAmenities": { + "type": "array", + "items": { + "$ref": "#/definitions/PropertyOffersHotelAmenity" + } + }, + "pointOfInterest": { + "type": "array", + "items": { + "$ref": "#/definitions/OfferPointOfInterest" + } + }, + "marketingMessage": { + "type": "string", + "description": "Property level marketing message.", + "example": "Thank you for choosing our property." + } + } + } + ] + }, + "PropertyOffersHotelAmenity": { + "type": "object", + "properties": { + "hotelAmenity": { + "type": "string", + "description": "Feature available at a hotel", + "example": "12" + }, + "description": { + "type": "string", + "description": "Description of a hotel amenity", + "example": "Swimming Pool" + }, + "quantity": { + "type": "integer", + "description": "Quantity of a hotel amenity", + "example": 1 + }, + "includeInRate": { + "type": "boolean", + "description": "Indicates if an amenity is included in a room rate", + "example": true + }, + "confirmable": { + "type": "boolean", + "description": "If a hotel amenity is confirmed to be available", + "example": false + } + } + }, + "PropertySearchPropertyInfo": { + "description": "Property information", + "type": "object", + "properties": { + "hotelCode": { + "type": "string", + "description": "A channel hotel code", + "example": "XUSXXYY99" + }, + "hotelName": { + "type": "string", + "description": "A full name of a hotel", + "example": "Resort1" + }, + "chainCode": { + "type": "string", + "description": "Channel chain code for a property", + "example": "CHAIN1" + }, + "isAlternate": { + "type": "boolean", + "example": true, + "description": "The code logic to support this element is not implemented and this element is deprecated." + } + } + }, + "RatePlansResponse": { + "description": "Rate Plans Response", + "type": "object", + "properties": { + "ratePlans": { + "description": "Collection of the returned Rate Plans for a given channel", + "type": "array", + "items": { + "$ref": "#/definitions/ContentRatePlan" + } + }, + "count": { + "type": "integer", + "example": 50 + }, + "hasMore": { + "type": "boolean", + "example": true + }, + "limit": { + "type": "integer", + "example": 100 + }, + "offset": { + "type": "integer", + "example": 25 + }, + "totalResults": { + "type": "integer", + "example": 500 + } + } + }, + "Transportation": { + "type": "object", + "properties": { + "transportationCode": { + "type": "string", + "description": "Transportation type ex: Bus, Taxi. Enum values from globalCodes TRP - Transportation Code", + "example": "Metro" + }, + "description": { + "type": "string", + "maxLength": 1024, + "example": "Description for a Transportation" + }, + "includeInRate": { + "type": "boolean", + "description": "Indicates whether charge rate is included or excluded", + "example": false + }, + "reservationRequired": { + "type": "boolean", + "description": "Indicates whether reservation is required for this Transportation", + "example": true + } + } + }, + "Url": { + "type": "object", + "properties": { + "url": { + "description": "The url or internet web address", + "type": "string" + } + } + }, + "RoomTypesResponse": { + "description": "Room Types Response", + "type": "object", + "properties": { + "roomTypes": { + "description": "Collection of the returned Room Types for given channel", + "type": "array", + "items": { + "$ref": "#/definitions/ContentRoomType" + } + }, + "count": { + "type": "integer", + "example": 50 + }, + "hasMore": { + "type": "boolean", + "example": true + }, + "limit": { + "type": "integer", + "example": 100 + }, + "offset": { + "type": "integer", + "example": 25 + }, + "totalResults": { + "type": "integer", + "example": 500 + } + } + }, + "ContentRoomType": { + "type": "object", + "description": "Room Type information", + "properties": { + "hotelRoomType": { + "type": "string", + "example": "A1K", + "description": "A room type code for a hotel." + }, + "roomType": { + "type": "string", + "example": "XA1K", + "description": "A code for a room type for a requested channel." + }, + "description": { + "type": "array", + "items": { + "type": "string", + "example": "Deluxe King Room on my Channel" + } + }, + "roomName": { + "type": "string", + "example": 102 + }, + "roomCategory": { + "type": "string", + "example": "SUITE" + }, + "roomAmenities": { + "type": "array", + "items": { + "$ref": "#/definitions/ContentRoomAmenity" + } + }, + "roomViewType": { + "type": "string" + }, + "roomPrimaryBedType": { + "type": "string" + }, + "nonSmokingInd": { + "type": "boolean", + "example": true + }, + "occupancy": { + "type": "object", + "$ref": "#/definitions/Occupancy" + }, + "numberOfUnits": { + "type": "integer", + "description": "number of rooms requested", + "example": 1 + } + } + }, + "Occupancy": { + "type": "object", + "properties": { + "minOccupancy": { + "description": "Assigned Type: ota2-0500:NonNegativeInteger", + "type": "integer", + "format": "int32", + "minimum": 0, + "exclusiveMinimum": false, + "example": 2 + }, + "maxOccupancy": { + "description": "Assigned Type: ota2-0500:NonNegativeInteger", + "type": "integer", + "format": "int32", + "minimum": 0, + "exclusiveMinimum": false, + "example": 8 + }, + "maxAdultOccupancy": { + "description": "Assigned Type: ota2-0500:NonNegativeInteger", + "type": "integer", + "format": "int32", + "minimum": 0, + "exclusiveMinimum": false, + "example": 4 + }, + "maxChildOccupancy": { + "description": "Assigned Type: ota2-0500:NonNegativeInteger", + "type": "integer", + "format": "int32", + "minimum": 0, + "exclusiveMinimum": false, + "example": 3 + } + } + }, + "ContentRoomAmenity": { + "type": "object", + "properties": { + "roomAmenity": { + "type": "string" + }, + "description": { + "type": "string" + }, + "quantity": { + "type": "integer" + }, + "includeInRate": { + "type": "boolean" + }, + "confirmable": { + "type": "boolean" + } + } + }, + "ChannelRouteType": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ModifiableChannelRouteType" + }, + { + "properties": { + "messageType": { + "$ref": "#/definitions/MessageType" + } + } + } + ] + }, + "ModifiableChannelRouteType": { + "type": "object", + "properties": { + "url": { + "$ref": "#/definitions/MessageUrl" + } + } + }, + "MessageUrl": { + "description": "Message URL", + "type": "string", + "pattern": "^(http[s]?|ftp[s]?|sftp)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]", + "example": "https://pms-certification.profit.net/opera-cloud" + }, + "MessageType": { + "description": "Message type that is enabled.
AvailNotif - Indicates enable for hotel restrictions update
RatePlanNotif - Indicates enable for hotel rate and room pricing update
InvCountNotif - Indicates enable for hotel inventory counts update
GetRooms - Indicates enable to fetch rooms from the distribution partner system
GetRatePlans - Indicates enable to fetch rates from the distribution partner system
", + "type": "string", + "enum": [ + "AvailNotif", + "RatePlanNotif", + "InvCountNotif", + "GetRooms", + "GetRatePlans" + ], + "example": "AvailNotif", + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } + }, + "RateRoomsResponse": { + "description": "Rate Rooms Response", + "type": "object", + "properties": { + "rateRooms": { + "description": "Collection of the returned RateRooms for given channel", + "type": "array", + "items": { + "$ref": "#/definitions/ContentRateRoom" + } + }, + "count": { + "type": "integer", + "example": 50 + }, + "hasMore": { + "type": "boolean", + "example": true + }, + "limit": { + "type": "integer", + "example": 100 + }, + "offset": { + "type": "integer", + "example": 25 + }, + "totalResults": { + "type": "integer", + "example": 500 + } + } + }, + "ContentRateRoom": { + "type": "object", + "properties": { + "ratePlanCode": { + "type": "string", + "example": "XDAILY", + "description": "A code for a rate plan for a requested channel." + }, + "hotelRatePlanCode": { + "type": "string", + "example": "DAILY", + "description": "A rate plan code for a hotel." + }, + "roomType": { + "type": "string", + "example": "XA1K", + "description": "A code for a room type for a requested channel." + }, + "hotelRoomType": { + "type": "string", + "example": "A1K", + "description": "A room type code for a hotel." + }, + "active": { + "type": "boolean", + "example": true, + "description": "It represent if the rate room is active or inactive. Default value is true." + }, + "occupancy": { + "type": "object", + "description": "It holds list of elements that defines room type occupancy information.", + "$ref": "#/definitions/Occupancy" + } + } + }, + "HotelChildPolicy": { + "type": "object", + "properties": { + "kidsStayFreeInd": { + "type": "boolean" + }, + "usualStayFreeCutoffAge": { + "type": "integer", + "example": 5 + }, + "maxChildAge": { + "type": "integer", + "example": 18 + } + } + }, + "TimeZone": { + "type": "object", + "properties": { + "timeZoneName": { + "type": "string", + "description": "Zone Name of the region", + "minLength": 1, + "maxLength": 50, + "example": "Asia/Calcutta" + }, + "offset": { + "type": "string", + "description": "Provides the current offset from UTC for the specified time zone, considering DST", + "minLength": 1, + "maxLength": 50, + "example": "UTC+05:30" + } + } + } + }, + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } +} \ No newline at end of file diff --git a/rest-api-specs/distribution/distributiononboarding.json b/rest-api-specs/distribution/distributiononboarding.json new file mode 100644 index 0000000..9fc21bc --- /dev/null +++ b/rest-api-specs/distribution/distributiononboarding.json @@ -0,0 +1,479 @@ +{ + "swagger": "2.0", + "info": { + "title": "OPERA Cloud Distribution Onboarding", + "description": "Oracle Hospitality Distribution Onboarding specification for distribution partners to retrieve property status with its attributes and update property status.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", + "termsOfService": "https://www.oracle.com/legal/terms.html", + "contact": { + "email": "hospitality_apis_ww_grp@oracle.com" + }, + "license": { + "name": "UPL", + "url": "https://opensource.org/licenses/upl" + } + }, + "basePath": "/onboard/v1", + "schemes": [ + "https" + ], + "produces": [ + "application/json; charset=utf-8" + ], + "paths": { + "/hotels/{hotelCode}/propertyStatus": { + "put": { + "summary": "Update property status for a given channel.", + "operationId": "putPropertyStatus", + "description": "Modify property status for given property for given channel.OperationId:putPropertyStatus
", + "tags": [ + "Onboarding" + ], + "consumes": [ + "application/json; charset=utf-8" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/UpdateConnectionInformationData" + }, + "required": true + }, + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/hotelCodePath" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/authKey" + }, + { + "$ref": "#/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "Updated property status for a given channel.", + "headers": { + "Location": { + "type": "string", + "description": "Location of the updated resource", + "x-example": "/onboard/v1/hotels/{hotelCode}/propertyStatus" + }, + "Content-Language": { + "type": "string", + "description": "Response language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-US" + } + }, + "schema": { + "$ref": "#/definitions/UpdateChannelPropertyStatus" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + }, + "get": { + "summary": "Get Property Status.", + "operationId": "getPropertyStatus", + "description": "Retrieve property status for a given channel.OperationId:getPropertyStatus
", + "tags": [ + "Onboarding" + ], + "consumes": [ + "application/json; charset=utf-8" + ], + "parameters": [ + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/hotelCodePath" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/authKey" + }, + { + "$ref": "#/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "Get Property Status.", + "headers": { + "Location": { + "type": "string", + "description": "Location of the resource", + "x-example": "/onboard/v1/hotels/{hotelCode}/propertyStatus" + }, + "Content-Language": { + "type": "string", + "description": "Response language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-US" + } + }, + "schema": { + "$ref": "#/definitions/ChannelPropertyStatus" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + } + }, + "parameters": { + "x-channelCode": { + "name": "x-channelCode", + "in": "header", + "description": "Code for the channel.", + "type": "string", + "minLength": 1, + "maxLength": 50, + "required": true, + "x-example": "CH1" + }, + "hotelCodePath": { + "name": "hotelCode", + "description": "The unique identifier of the Property in Channel system.", + "type": "string", + "in": "path", + "required": true, + "minLength": 1, + "x-example": "XUSXXYY99" + }, + "authKey": { + "name": "authorization", + "in": "header", + "description": "Bearer token that needs to be passed which is generated post user authentication", + "required": true, + "type": "string" + }, + "x-app-key": { + "name": "x-app-key", + "in": "header", + "description": "Client or Partner's Application Key", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$", + "type": "string", + "required": false + }, + "Accept-Language": { + "name": "Accept-Language", + "in": "header", + "type": "string", + "description": "Language code" + } + }, + "definitions": { + "ExceptionDetail": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ExceptionObj" + }, + { + "type": "object", + "properties": { + "o.errorDetails": { + "type": "array", + "items": { + "$ref": "#/definitions/ExceptionObj" + } + } + } + } + ] + }, + "ExceptionObj": { + "type": "object", + "properties": { + "logId": { + "type": "integer", + "example": 884366976 + }, + "title": { + "type": "string", + "description": "Short, human-readable summary of the problem. The summary SHOULD NOT change for subsequent occurrences of the problem, except for purposes of localization." + }, + "status": { + "type": "integer", + "description": "HTTP status code for this occurrence of the problem, set by the origin server.", + "example": 400 + }, + "o.errorCode": { + "type": "string", + "description": "HDP error code, which is different from HTTP error code.", + "example": "DCR00001" + }, + "type": { + "type": "string", + "description": "Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem.", + "example": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.x" + }, + "timestamp": { + "type": "string", + "example": "2021-09-17T08:17:18.321Z", + "format": "date-time" + } + }, + "required": [ + "logId", + "title", + "status" + ] + }, + "UpdateChannelPropertyStatus": { + "type": "object", + "properties": { + "hotelCode": { + "type": "string", + "description": "The unique identifier of the Property in Channel system.", + "example": "XUSXXYY99" + }, + "channelCode": { + "type": "string", + "description": "Unique ID that identifies a single Channel.", + "example": "CH1", + "maxLength": 20, + "minLength": 1 + }, + "connectionInformation": { + "$ref": "#/definitions/UpdateConnectionInformation" + } + } + }, + "UpdateConnectionInformation": { + "type": "object", + "description": "Channel Connection Information", + "properties": { + "connectionStatus": { + "$ref": "#/definitions/UpdateConnectionStatus" + }, + "connectionNotes": { + "type": "string", + "description": "Connection Notes for the latest connection Status change.", + "maxLength": 300, + "example": "Property onboarded successfully" + }, + "connectionStatusLastChangedOn": { + "type": "string", + "format": "date-time", + "description": "Date on which Channel connection status was updated last time." + } + } + }, + "UpdateConnectionInformationData": { + "type": "object", + "description": "Channel Connection Information", + "properties": { + "connectionStatus": { + "$ref": "#/definitions/UpdateConnectionStatus" + }, + "connectionNotes": { + "type": "string", + "description": "Connection Notes for the latest connection Status change.", + "maxLength": 300, + "example": "Property onboarded successfully" + } + }, + "required": [ + "connectionStatus", + "connectionNotes" + ] + }, + "ConnectionInformation": { + "type": "object", + "description": "Channel Connection Information", + "properties": { + "connectionStatus": { + "$ref": "#/definitions/ConnectionStatus" + }, + "connectionNotes": { + "type": "string", + "description": "Connection Notes for the latest connection Status change.", + "maxLength": 300, + "example": "Property onboarded successfully" + }, + "connectionStatusLastChangedOn": { + "type": "string", + "format": "date-time", + "description": "Date on which Channel connection status was updated last time.", + "example": "2021-09-17T08:17:18.321Z" + } + } + }, + "UpdateConnectionStatus": { + "type": "string", + "description": "The connection status to be updated for the given channel and property. The connection status can be changed to TEST / MAINTENANCE if the existing connection Status is NEW. If the existing connection status is TEST, it can be changed to MAINTENANCE.", + "enum": [ + "TEST", + "MAINTENANCE" + ], + "example": "TEST" + }, + "ChannelPropertyStatus": { + "type": "object", + "properties": { + "hotelCode": { + "type": "string", + "description": "The unique identifier of the Property in Channel system.", + "example": "XUSXXYY99" + }, + "channelCode": { + "type": "string", + "description": "Unique ID that identifies a single Channel.", + "example": "CH1", + "maxLength": 20, + "minLength": 1 + }, + "connectionInformation": { + "$ref": "#/definitions/ConnectionInformation" + } + } + }, + "ConnectionStatus": { + "type": "string", + "description": "The connection status to the property.", + "enum": [ + "NEW", + "TEST", + "MAINTENANCE", + "ACTIVE", + "INACTIVE" + ], + "example": "ACTIVE" + } + }, + "tags": [ + { + "name": "Onboarding", + "description": "Distribution Onboarding" + } + ], + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } +} \ No newline at end of file diff --git a/rest-api-specs/distribution/distributionpropertycontrols.json b/rest-api-specs/distribution/distributionpropertycontrols.json new file mode 100644 index 0000000..ad99b4d --- /dev/null +++ b/rest-api-specs/distribution/distributionpropertycontrols.json @@ -0,0 +1,293 @@ +{ + "swagger": "2.0", + "info": { + "title": "OPERA Cloud Distribution Property Controls", + "description": "Oracle Hospitality Distribution Property Controls specification for distribution partners to retrieve property controls and settings.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", + "termsOfService": "https://www.oracle.com/legal/terms.html", + "contact": { + "email": "hospitality_apis_ww_grp@oracle.com" + }, + "license": { + "name": "UPL", + "url": "https://opensource.org/licenses/upl" + } + }, + "basePath": "/controls/v1", + "schemes": [ + "https" + ], + "produces": [ + "application/json; charset=utf-8" + ], + "paths": { + "/hotels/{hotelCode}/propertyControls": { + "get": { + "summary": "Fetch Channel Property Controls for a given channel and a Hotel.", + "operationId": "getPropertyControls", + "description": "Fetch Channel Property Controls for a given property for given channel.OperationId:getPropertyControls
", + "tags": [ + "Distribution Controls" + ], + "consumes": [ + "application/json; charset=utf-8" + ], + "parameters": [ + { + "$ref": "#/parameters/x-channelCode" + }, + { + "$ref": "#/parameters/hotelCodePath" + }, + { + "$ref": "#/parameters/x-app-key" + }, + { + "$ref": "#/parameters/authKey" + }, + { + "$ref": "#/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "Get Property Controls.", + "headers": { + "Location": { + "type": "string", + "description": "Location of the resource", + "x-example": "/controls/v1/hotels/{hotelCode}/propertyControls" + }, + "Content-Language": { + "type": "string", + "description": "Response language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-US" + } + }, + "schema": { + "$ref": "#/definitions/ChannelPropertyControls" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + } + }, + "parameters": { + "x-channelCode": { + "name": "x-channelCode", + "in": "header", + "description": "Code for the channel.", + "type": "string", + "minLength": 1, + "maxLength": 50, + "required": true, + "x-example": "CH1" + }, + "hotelCodePath": { + "name": "hotelCode", + "description": "The unique identifier of the Property in Channel system.", + "type": "string", + "in": "path", + "required": true, + "minLength": 1, + "x-example": "XUSXXYY99" + }, + "authKey": { + "name": "authorization", + "in": "header", + "description": "Bearer token that needs to be passed which is generated post user authentication", + "required": true, + "type": "string" + }, + "x-app-key": { + "name": "x-app-key", + "in": "header", + "description": "Client or Partner's Application Key", + "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$", + "type": "string", + "required": false + }, + "Accept-Language": { + "name": "Accept-Language", + "in": "header", + "type": "string", + "description": "Language code" + } + }, + "definitions": { + "ExceptionDetail": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ExceptionObj" + }, + { + "type": "object", + "properties": { + "o.errorDetails": { + "type": "array", + "items": { + "$ref": "#/definitions/ExceptionObj" + } + } + } + } + ] + }, + "ExceptionObj": { + "type": "object", + "properties": { + "logId": { + "type": "integer", + "example": 884366976 + }, + "title": { + "type": "string", + "description": "Short, human-readable summary of the problem. The summary SHOULD NOT change for subsequent occurrences of the problem, except for purposes of localization." + }, + "status": { + "type": "integer", + "description": "HTTP status code for this occurrence of the problem, set by the origin server.", + "example": 400 + }, + "o.errorCode": { + "type": "string", + "description": "HDP error code, which is different from HTTP error code.", + "example": "DCR00001" + }, + "type": { + "type": "string", + "description": "Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem.", + "example": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.x" + }, + "timestamp": { + "type": "string", + "example": "2021-09-17T08:17:18.321Z", + "format": "date-time" + } + }, + "required": [ + "logId", + "title", + "status" + ] + }, + "ChannelPropertyControls": { + "type": "object", + "properties": { + "hotelCode": { + "type": "string", + "description": "The unique identifier of the Property in Channel system.", + "example": "XUSXXYY99" + }, + "channelCode": { + "type": "string", + "description": "Unique ID that identifies a single Channel.", + "example": "CH1", + "maxLength": 20, + "minLength": 1 + }, + "chainCode": { + "type": "string", + "description": "Channel level Chain Code", + "example": "CCHAIN1" + }, + "channelPropertyControls": { + "$ref": "#/definitions/ConnectionInformation" + } + } + }, + "ConnectionInformation": { + "type": "object", + "description": "Controls in Channel Property Level", + "properties": { + "ariFutureDays": { + "type": "integer", + "description": "Number of future days for which ARI is maintained by this channel.", + "example": 400 + }, + "channelDefaultTravelAgentId": { + "type": "string", + "description": "Default Travel Agent Id of the channel", + "example": "TA1234567" + }, + "alertRecipients": { + "type": "array", + "description": "List of user email ids to which any failover emails to be triggered.", + "items": { + "type": "string" + }, + "example": [ + "user1@email.com", + "user2@email.com" + ] + } + } + } + }, + "tags": [ + { + "name": "Distribution Controls", + "description": "Distribution Property Controls" + } + ], + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } +} \ No newline at end of file diff --git a/rest-api-specs/distribution/distributionreservationbook.json b/rest-api-specs/distribution/distributionreservationbook.json index 1ae45da..5868dc9 100644 --- a/rest-api-specs/distribution/distributionreservationbook.json +++ b/rest-api-specs/distribution/distributionreservationbook.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "OPERA Cloud Distribution Book", - "description": "OPERA Cloud Distribution Reservations API allows authorized channel partners to create and update reservations for any active property in Oracle Hospitality Distribution (regardless if the property is using OPERA Cloud / OPERA V5 / on-premise PMS Versions).This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2024 Oracle and/or its affiliates.
", - "version": "24.3.0", + "description": "OPERA Cloud Distribution Reservations API allows authorized channel partners to create and update reservations for any active property in Oracle Hospitality Distribution (regardless if the property is using OPERA Cloud, OPERA V5 / Suite8 / on-premise PMS Versions).This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", "termsOfService": "https://www.oracle.com/legal/terms.html", "contact": { "email": "hospitality_apis_ww_grp@oracle.com" @@ -45,7 +45,7 @@ "$ref": "#/parameters/hotelCodePath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -141,7 +141,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -224,7 +224,7 @@ "$ref": "#/parameters/hotelCodePath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -326,7 +326,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -422,7 +422,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -787,7 +787,7 @@ "$ref": "#/definitions/ReservationPoliciesResponse" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -882,7 +882,7 @@ "example": "2023-11-17T12:21:00Z" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -975,7 +975,7 @@ "example": "Committed" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" } @@ -1242,15 +1242,16 @@ ], "reservationPaymentMethods": [ { - "paymentMethod": "1", + "paymentMethod": "5", "folioView": "1", "paymentCard": { "cardType": "MC", - "cardNumber": "5105 1051 0510 5100 ", + "cardNumber": "4562967335452516", "expirationDate": "06/21", "cardHolderName": "Mary Smith", "cardNumberMasked": "XXXXXXXXXXXX0005", - "cardOrToken": "Token" + "cardOrToken": "Token", + "citId": "358908FDHD53" } } ], @@ -1513,7 +1514,7 @@ } }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1744,7 +1745,7 @@ } }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1810,7 +1811,7 @@ "example": "2023-11-17T12:21:00Z" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1854,7 +1855,7 @@ "example": "Commit" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -2142,6 +2143,7 @@ "properties": { "tax": { "type": "array", + "description": "List of taxes applicable for this reservation", "minItems": 1, "items": { "$ref": "#/definitions/Tax" @@ -2154,23 +2156,20 @@ }, "currencyCode": { "type": "string", - "description": "The Tax currency code. This should be ISO currency code.", + "description": "ISO currency code of the tax.", "example": "EUR" } } }, "Total": { "type": "object", - "description": "Reservation Total Rate Information\n* If the rate plan is configured as tax Inclusive, Amount After Tax is expected in reservation requests.\n* If the rate Plan is configured as Tax exclusive, Amount Before Tax is expected in reservation requests.\n", + "description": "Reservation Total Rate Information\n* If the rate plan is configured as Tax Inclusive, Amount After Tax is returned.\n* If the rate Plan is configured as Tax Exclusive, Amount Before Tax is returned.\n", "properties": { "taxes": { "type": "object", + "description": "Total Tax details applicable for this reservation", "$ref": "#/definitions/Taxes" }, - "description": { - "type": "string", - "example": "string" - }, "currencySymbol": { "type": "string", "description": "Symbol of Rate Currency.", @@ -2181,10 +2180,6 @@ "description": "Rate Amount decimal Places.", "example": 1 }, - "code": { - "type": "string", - "example": "string" - }, "rateOverride": { "type": "boolean", "description": "Indicated if the rate is ovverriden or not.", @@ -2210,11 +2205,12 @@ "properties": { "description": { "type": "string", - "description": "Description of the tax.", - "example": "Value added Tax" + "description": "OTA Standard Fee Tax Type description", + "example": "VAT (Value Added Tax)" }, "type": { "type": "string", + "description": "Indicates if this tax is included or excluded in rate.", "enum": [ "Inclusive", "Exclusive" @@ -2223,17 +2219,17 @@ }, "code": { "type": "string", - "description": "Code of the Tax.", - "example": "VAT10" + "description": "OTA Standard Fee Tax Type", + "example": "36" }, "amount": { "type": "number", - "description": "Tax Amount.", + "description": "Total tax amount of given Fee Tax type.", "example": 10 }, "currencyCode": { "type": "string", - "description": "The Tax currency code. This should be ISO currency code.", + "description": "ISO currency code of the tax.", "example": "EUR" } } @@ -3280,6 +3276,13 @@ "CardNumber", "Token" ] + }, + "citId": { + "type": "string", + "description": "Customer Initiated Transaction(CIT) Id for Credit Cards. This is only used when PAYMENT SERVICES DIRECTIVE (PSD2) Opera Control is active.", + "minLength": 0, + "maxLength": 16, + "example": "654321ABC1234578" } }, "required": [ @@ -3342,7 +3345,7 @@ }, "hotelCode": { "type": "string", - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "example": "XUSXXYY99" }, "hotelName": { @@ -3754,11 +3757,11 @@ "required": false, "x-example": "en-GB" }, - "x-tracing-key": { - "name": "x-hdp-tracing-key", + "x-request-id": { + "name": "x-request-id", "in": "header", "description": "Unique tracing key e.g. 4664ab3423434a45", - "required": true, + "required": false, "type": "string", "x-example": "4664ab3423434a45" }, @@ -3795,7 +3798,7 @@ }, "hotelCodePath": { "name": "hotelCode", - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "in": "path", "required": true, @@ -3819,6 +3822,16 @@ "required": false, "minLength": 1, "x-example": "1" + }, + "externalReferenceIdsQueryParam": { + "name": "externalReferenceId", + "description": "Reservation Reference Id in Channel", + "type": "string", + "in": "query", + "required": true, + "minLength": 1, + "maxLength": 20, + "x-example": "LZDI6496738895" } }, "responses": { diff --git a/rest-api-specs/distribution/distributionreservationnotif.json b/rest-api-specs/distribution/distributionreservationnotif.json index 74b2e3e..f3d2f4f 100644 --- a/rest-api-specs/distribution/distributionreservationnotif.json +++ b/rest-api-specs/distribution/distributionreservationnotif.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "OPERA Cloud Distribution Reservation Notification", - "description": "OPERA Cloud Distribution Reservation Notifications API allows authorized channel partners to create and update reservations for any active property in Oracle Hospitality Distribution (regardless if the property is using OPERA Cloud / OPERA V5 / on-premise PMS Versions). This API is meant to transmit reservations already created and committed in the channel external system and does not perform any Pricing and Availability validation.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2024 Oracle and/or its affiliates.
", - "version": "24.3.0", + "description": "OPERA Cloud Distribution Reservation Notifications API allows authorized channel partners to create and update reservations for any active property in Oracle Hospitality Distribution (regardless if the property is using OPERA Cloud / OPERA V5 / on-premise PMS Versions). This API is meant to transmit reservations already created and committed in the channel external system and does not perform any Pricing and Availability validation.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", "termsOfService": "https://www.oracle.com/legal/terms.html", "contact": { "email": "hospitality_apis_ww_grp@oracle.com" @@ -45,7 +45,7 @@ "$ref": "#/parameters/hotelCodePath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -130,7 +130,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -221,7 +221,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -314,7 +314,7 @@ "$ref": "#/parameters/confirmationNumberPath" }, { - "$ref": "#/parameters/x-tracing-key" + "$ref": "#/parameters/x-request-id" }, { "$ref": "#/parameters/authKey" @@ -702,6 +702,12 @@ "$ref": "#/definitions/PaymentMethod" } }, + "reservationSpecialRequests": { + "type": "array", + "items": { + "$ref": "#/definitions/ReservationSpecialRequestsResponse" + } + }, "reservationPackages": { "description": "Details of the Packages added to the reservation.", "type": "array", @@ -716,7 +722,7 @@ } }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -822,8 +828,29 @@ }, "total": { "type": "object", - "description": "Reservation Total Rate Information\n* If the rate plan is configured as tax Inclusive, Amount After Tax is expected in reservation requests.\n* If the rate Plan is configured as Tax exclusive, Amount Before Tax is expected in reservation requests.\n", + "description": "Reservation Total Rate Information\n* If the rate plan is configured as Tax Inclusive, Amount After Tax is returned.\n* If the rate Plan is configured as Tax Exclusive, Amount Before Tax is returned.\n", "properties": { + "taxes": { + "type": "object", + "description": "Total Tax details applicable for this reservation", + "$ref": "#/definitions/Taxes" + }, + "currencySymbol": { + "type": "string", + "description": "Symbol of Rate Currency.", + "example": "$" + }, + "decimalPlaces": { + "type": "integer", + "format": "int32", + "description": "Rate Amount decimal Places.", + "example": 1 + }, + "rateOverride": { + "type": "boolean", + "description": "Indicated if the rate is overridden or not.", + "example": true + }, "amountAfterTax": { "type": "number", "example": 214.5, @@ -876,6 +903,60 @@ "roomRates" ] }, + "Taxes": { + "type": "object", + "description": "Tax details.", + "properties": { + "tax": { + "type": "array", + "description": "List of taxes applicable for this reservation", + "minItems": 1, + "items": { + "$ref": "#/definitions/Tax" + } + }, + "amount": { + "type": "number", + "description": "Total Tax amount applicable for the reservation.", + "example": 20.3 + }, + "currencyCode": { + "$ref": "#/definitions/CurrencyCode" + } + } + }, + "Tax": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "OTA Standard Fee Tax Type description", + "example": "VAT (Value Added Tax)" + }, + "type": { + "type": "string", + "description": "Indicates if this tax is included or excluded in rate.", + "enum": [ + "Inclusive", + "Exclusive" + ], + "example": "Exclusive" + }, + "code": { + "type": "string", + "description": "OTA Standard Fee Tax Type", + "example": "36" + }, + "amount": { + "type": "number", + "description": "Total tax amount of given Fee Tax type.", + "example": 10 + }, + "currencyCode": { + "$ref": "#/definitions/CurrencyCode" + } + } + }, "RoomRateResponseGet": { "type": "object", "description": "The room rate response object for get", @@ -1088,7 +1169,7 @@ "example": "2023-11-17T12:21:00Z" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1285,6 +1366,12 @@ "$ref": "#/definitions/PaymentMethod" } }, + "reservationSpecialRequests": { + "type": "array", + "items": { + "$ref": "#/definitions/ReservationSpecialRequestsResponse" + } + }, "reservationPackages": { "description": "Details of the Packages added to the reservation.", "type": "array", @@ -1299,7 +1386,7 @@ } }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1630,6 +1717,35 @@ "$ref": "#/definitions/PaymentMethod" } }, + "reservationSpecialRequests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "requestCodes": { + "description": "Collection of special requests such as Preferences for a reservation guest", + "type": "array", + "items": { + "$ref": "#/definitions/RequestCodes" + } + }, + "requestCodeType": { + "type": "string", + "minLength": 0, + "maxLength": 20, + "example": "SPECIALS", + "description": "Group code of special request such as specials, feature, bed feature, etc." + }, + "requestCodeTypeContext": { + "type": "string", + "description": "It represents request code and request type are OHD configured values.", + "enum": [ + "Central" + ] + } + } + } + }, "reservationPackages": { "description": "Details of the Packages added to the reservation.", "type": "array", @@ -1644,7 +1760,7 @@ } }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -1715,7 +1831,7 @@ "example": "2023-11-17T12:21:00Z" }, "hotelCode": { - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "example": "XUSXXYY99" }, @@ -2093,8 +2209,29 @@ }, "total": { "type": "object", - "description": "Reservation Total Rate Information\n* If the rate plan is configured as tax Inclusive, Amount After Tax is expected in reservation requests.\n* If the rate Plan is configured as Tax exclusive, Amount Before Tax is expected in reservation requests.\n", + "description": "Reservation Total Rate Information\n* If the rate plan is configured as Tax Inclusive, Amount After Tax is returned.\n* If the rate Plan is configured as Tax Exclusive, Amount Before Tax is returned.\n", "properties": { + "taxes": { + "type": "object", + "description": "Total Tax details applicable for this reservation", + "$ref": "#/definitions/Taxes" + }, + "currencySymbol": { + "type": "string", + "description": "Symbol of Rate Currency.", + "example": "$" + }, + "decimalPlaces": { + "type": "integer", + "format": "int32", + "description": "Rate Amount decimal Places.", + "example": 1 + }, + "rateOverride": { + "type": "boolean", + "description": "Indicated if the rate is overridden or not.", + "example": true + }, "amountAfterTax": { "type": "number", "example": 214.5, @@ -2206,8 +2343,29 @@ }, "total": { "type": "object", - "description": "Reservation Total Rate Information\n* If the rate plan is configured as tax Inclusive, Amount After Tax is expected in reservation requests.\n* If the rate Plan is configured as Tax exclusive, Amount Before Tax is expected in reservation requests.\n", + "description": "Reservation Total Rate Information\n* If the rate plan is configured as Tax Inclusive, Amount After Tax is returned.\n* If the rate Plan is configured as Tax Exclusive, Amount Before Tax is returned.\n", "properties": { + "taxes": { + "type": "object", + "description": "Total Tax details applicable for this reservation", + "$ref": "#/definitions/Taxes" + }, + "currencySymbol": { + "type": "string", + "description": "Symbol of Rate Currency.", + "example": "$" + }, + "decimalPlaces": { + "type": "integer", + "format": "int32", + "description": "Rate Amount decimal Places.", + "example": 1 + }, + "rateOverride": { + "type": "boolean", + "description": "Indicated if the rate is overridden or not.", + "example": true + }, "amountAfterTax": { "type": "number", "example": 214.5, @@ -2587,6 +2745,32 @@ "paymentMethod" ] }, + "ReservationSpecialRequestsResponse": { + "type": "object", + "properties": { + "requestCodes": { + "description": "Collection of special requests such as Preferences for a reservation guest", + "type": "array", + "items": { + "$ref": "#/definitions/RequestCodesResponse" + } + }, + "requestCodeType": { + "type": "string", + "minLength": 0, + "maxLength": 20, + "example": "SPECIALS", + "description": "Group code of special request such as specials, feature, bed feature, etc." + }, + "requestCodeTypeContext": { + "type": "string", + "description": "It represents request code and request type are OHD configured values.", + "enum": [ + "Central" + ] + } + } + }, "Promotion": { "type": "object", "description": "Details of Promotion attached to the reservation.", @@ -2646,6 +2830,37 @@ } } }, + "RequestCodes": { + "type": "object", + "properties": { + "requestCodeValue": { + "description": "Special request code from OHD configuration", + "example": "PILLOW", + "type": "string", + "minLength": 0, + "maxLength": 200 + } + } + }, + "RequestCodesResponse": { + "type": "object", + "properties": { + "requestCodeValue": { + "description": "Special request code from OHD configuration", + "example": "PILLOW", + "type": "string", + "minLength": 0, + "maxLength": 200 + }, + "requestCodeDescription": { + "description": "Special request's description or name.", + "example": "Additional Pillows", + "type": "string", + "minLength": 0, + "maxLength": 2000 + } + } + }, "BlockIdList": { "type": "object", "properties": { @@ -2676,8 +2891,7 @@ }, "unitPrice": { "description": "The price per unit of the package.", - "type": "integer", - "format": "int32", + "type": "number", "example": 50 }, "totalQuantity": { @@ -2792,6 +3006,13 @@ "CardNumber", "Token" ] + }, + "citId": { + "type": "string", + "description": "Customer Initiated Transaction(CIT) Id for Credit Cards. This is only used when PAYMENT SERVICES DIRECTIVE (PSD2) Opera Control is active.", + "minLength": 0, + "maxLength": 16, + "example": "654321ABC1234578" } }, "required": [ @@ -2811,11 +3032,11 @@ "required": false, "x-example": "en-GB" }, - "x-tracing-key": { - "name": "x-hdp-tracing-key", + "x-request-id": { + "name": "x-request-id", "in": "header", "description": "Unique tracing key e.g. 4664ab3423434a45", - "required": true, + "required": false, "type": "string", "x-example": "4664ab3423434a45" }, @@ -2845,7 +3066,7 @@ }, "hotelCodePath": { "name": "hotelCode", - "description": "The unique identifier of the Property for which the reservation is created.", + "description": "The unique identifier of the Property in Channel system.", "type": "string", "in": "path", "required": true, diff --git a/rest-api-specs/distribution/distributionshop.json b/rest-api-specs/distribution/distributionshop.json index cdea27d..f2e95bd 100644 --- a/rest-api-specs/distribution/distributionshop.json +++ b/rest-api-specs/distribution/distributionshop.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "OPERA Cloud Distribution Shop", - "description": "Oracle Hospitality Distribution Shop is for distribution partners to find properties availability, room-rates offers for a single property or a specific room-rate offer detail.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2024 Oracle and/or its affiliates.
", - "version": "24.3.0", + "description": "Oracle Hospitality Distribution Shop is for distribution partners to find properties availability, room-rates offers for a single property or a specific room-rate offer detail.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "version": "25.1.0.0", "contact": { "email": "hospitality_apis_ww_grp@oracle.com" }, diff --git a/rest-api-specs/distribution/outbound/distributionaripublication.json b/rest-api-specs/distribution/outbound/distributionaripublication.json index 3fceaf6..c424d48 100644 --- a/rest-api-specs/distribution/outbound/distributionaripublication.json +++ b/rest-api-specs/distribution/outbound/distributionaripublication.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "OPERA Cloud Distribution ARI Publication", - "version": "24.3", - "description": "Oracle Hospitality Distribution ARI publication message specification for distribution partners to receive in real time property restrictions/availability, rate, and inventory schedules updates, also known as ARI. Partner receives this message will respond with success or error/warning so that property/CRS user can see the status of message delivery in OPERA. A channel code identifier is required in Oracle Hospitality Distribution to receive those messages.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2024 Oracle and/or its affiliates.
", + "version": "25.1.0.0", + "description": "Oracle Hospitality Distribution ARI publication message specification for distribution partners to receive in real time property restrictions/availability, rate, and inventory schedules updates, also known as ARI. Partner receives this message will respond with success or error/warning so that property/CRS user can see the status of message delivery in OPERA. A channel code identifier is required in Oracle Hospitality Distribution to receive those messages.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", "contact": { "email": "hospitality_apis_ww_grp@oracle.com" }, @@ -43,26 +43,83 @@ "description": "Response for publishing inventory" }, "400": { - "$ref": "#/responses/400" + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "401": { - "$ref": "#/responses/401" + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "403": { - "$ref": "#/responses/403" + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "405": { - "$ref": "#/responses/405" + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "500": { - "$ref": "#/responses/500" + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } } }, "summary": "Publish Inventory", - "operationId": "Publish Inventory", - "description": "This message will provide property room type inventory (rooms to sell) by date to the distribution (full synchronization or delta updates).OperationId:Publish Inventory
", + "operationId": "postInventory", + "description": "This message will provide property room type inventory (rooms to sell) by date to the distribution (full synchronization or delta updates).OperationId:postInventory
", "tags": [ - "Publish Inventory" + "ARI Publication" ], "parameters": [ { @@ -75,6 +132,7 @@ { "name": "body", "in": "body", + "required": true, "schema": { "$ref": "#/definitions/OTA_HotelInvCountNotifRQ" } @@ -104,26 +162,83 @@ "description": "Response for publishing rates" }, "400": { - "$ref": "#/responses/400" + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "401": { - "$ref": "#/responses/401" + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "403": { - "$ref": "#/responses/403" + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "405": { - "$ref": "#/responses/405" + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "500": { - "$ref": "#/responses/500" + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } } }, "summary": "Publish Rates", - "operationId": "Publish Rates", - "description": "This message will provide property rate plans rate schedules by date and room type to the distribution.OperationId:Publish Rates
", + "operationId": "postRates", + "description": "This message will provide property rate plans rate schedules by date and room type to the distribution (full synchronization or delta updates).OperationId:postRates
", "tags": [ - "Publish Rates" + "ARI Publication" ], "parameters": [ { @@ -136,6 +251,7 @@ { "name": "body", "in": "body", + "required": true, "schema": { "$ref": "#/definitions/OTA_HotelRateAmountNotifRQ" } @@ -165,26 +281,83 @@ "description": "Response for publishing restrictions" }, "400": { - "$ref": "#/responses/400" + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "401": { - "$ref": "#/responses/401" + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "403": { - "$ref": "#/responses/403" + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "405": { - "$ref": "#/responses/405" + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "500": { - "$ref": "#/responses/500" + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } } }, "summary": "Publish Restrictions", - "operationId": "Publish Restrictions", - "description": "This message will provide property rate plan-room type restrictions by date to the distribution (full synchronization or delta updates)OperationId:Publish Restrictions
", + "operationId": "postRestrictions", + "description": "This message will provide property rate plan-room type restrictions by date to the distribution (full synchronization or delta updates).OperationId:postRestrictions
", "tags": [ - "Publish Restrictions" + "ARI Publication" ], "parameters": [ { @@ -197,6 +370,7 @@ { "name": "body", "in": "body", + "required": true, "schema": { "$ref": "#/definitions/OTA_HotelRestrictionsNotifRQ" } @@ -220,9 +394,6 @@ "description": "Indicates the creation date and time of the message in UTC using the following format specified by ISO 8601; YYYY-MM-DDThh:mm:ss.zzz with time values using the 24 hour clock (e.g. 20 November 2003, 1:59:38 pm UTC becomes 2003-11-20T13:59:38.000).", "example": "2021-11-20T13:59:38.000" }, - "ARI Publish Inventory": {}, - "ARI Publish Rates": {}, - "ARI Publish Restrictions": {}, "OTA_HotelRestrictionsNotifRQ": { "description": "The object provides property rate plan-room type restrictions by date to the distribution.", "type": "object", @@ -333,7 +504,7 @@ }, "LOSEnum": { "type": "string", - "description": "An enumerated type that represents various type of length of stay restrictions. It is used to define how the minimum and maximum LOS is applied.MinLOS - Indicates Minimum length of stay restriction. Apply based on arrival date.
MaxLOS - Indicates Maximum length of Stay restriction. Apply based on arrival date.
RemoveMinLOS - Removes minimum lenth of stay restriction.
RemoveMaxLOS - Removes maximum lenth of stay restriction.
ForwardMinStay - Indicates a Minimum Stay Through restriction.
ForwardMaxStay - Indicates a Maximum Stay Through restriction.
RemoveForwardMinStay - Removes minimum foraward stay through restriction.
RemoveForwardMaxStay - Removes minimum foraward stay through restriction.
FullPatternLOS - Indicates Full Pattern Length of Stay restriction.
", + "description": "An enumerated type that represents various type of length of stay restrictions. It is used to define how the minimum and maximum LOS is applied.MinLOS - Indicates Minimum length of stay restriction. Apply based on arrival date.
MaxLOS - Indicates Maximum length of Stay restriction. Apply based on arrival date.
RemoveMinLOS - Removes minimum lenth of stay restriction.
RemoveMaxLOS - Removes maximum lenth of stay restriction.
ForwardMinStay - Indicates a Minimum Stay Through restriction.
ForwardMaxStay - Indicates a Maximum Stay Through restriction.
RemoveForwardMinStay - Removes minimum foraward stay through restriction.
RemoveForwardMaxStay - Removes minimum foraward stay through restriction.
FullPatternLOS - Indicates Full Pattern Length of Stay restriction.
", "externalDocs": { "description": "Find out more about Oracle Hospitality Restriction", "url": "https://docs.oracle.com/en/industries/hospitality/opera-cloud/23.4/ocsuh/c_availability_restrictions.htm#Restrictions-300570AD" @@ -382,7 +553,7 @@ }, "restrictionEnum": { "type": "string", - "description": "The restriction type.Arrival -It is applicable based on arrival date of a booking.
Departure - It is applicable based on arrival date of a booking.
Master - This value indicates whether the room rate is available for booking on the date. Note: setting Master to Close is known as a STOP SELL
", + "description": "The restriction type.Arrival -It is applicable based on arrival date of a booking.
Departure - It is applicable based on arrival date of a booking.
Master - This value indicates whether the room rate is available for booking on the date. Note: setting Master to Close is known as a STOP SELL
", "enum": [ "Arrival", "Departure", @@ -489,7 +660,7 @@ }, "ratePlanNotifTypeEnum": { "type": "string", - "description": "The type of notification to apply to every rate notification message.Delta - Add or update the existing per-occupancy rates for the room type, rate plan, and dates specified in rate notification message.
New - Add new occupancy rates for the room type, rate plan, and dates specified in the rate notification message.
Overlay - Delete all of the per-occupancy rates for the room type, rate plan, and dates specified and replace them with new rates.
Remove - Delete all of the existing per-occupancy rates for the room type, rate plan, and dates.
", + "description": "The type of notification to apply to every rate notification message.Delta - Add or update the existing per-occupancy rates for the room type, rate plan, and dates specified in rate notification message.
New - Add new occupancy rates for the room type, rate plan, and dates specified in the rate notification message.
Overlay - Delete all of the per-occupancy rates for the room type, rate plan, and dates specified and replace them with new rates.
Remove - Delete all of the existing per-occupancy rates for the room type, rate plan, and dates.
", "enum": [ "Delta", "New", @@ -512,11 +683,13 @@ }, "start": { "type": "string", + "format": "date", "description": "The starting value of the date range in the ISO 8601 Date Format.", "example": "2015-07-11" }, "end": { "type": "string", + "format": "date", "description": "The ending value of the date range in the ISO 8601 Date Format.", "example": "2015-07-11" }, @@ -558,7 +731,6 @@ "ratesAmounts": { "type": "array", "description": "Rate amounts for the channelized room rate", - "example": 100, "items": { "$ref": "#/definitions/RatesAmount" } @@ -733,30 +905,34 @@ "statusApplicationControl": { "$ref": "#/definitions/invStatusApplicationControl" }, + "ratePlan": { + "type": "object", + "properties": { + "ratePlanCode": { + "type": "string", + "description": "The code for the rate plan.", + "example": "EX_DAILY" + } + } + }, "invCounts": { - "type": "array", + "type": "object", "description": "A container for defining a single inventory count.", - "items": { - "$ref": "#/definitions/InvCount" + "properties": { + "countType": { + "type": "string", + "description": "The type of inventory count being specified.", + "example": "DefinitiveAvailability" + }, + "count": { + "type": "string", + "description": "The number of rooms", + "example": "8" + } } } } }, - "InvCount": { - "type": "object", - "properties": { - "countType": { - "type": "string", - "description": "The type of inventory count being specified.", - "example": "DefinitiveAvailability" - }, - "count": { - "type": "string", - "description": "The number of rooms", - "example": "8" - } - } - }, "invStatusApplicationControl": { "type": "object", "required": [ @@ -767,11 +943,13 @@ "properties": { "start": { "type": "string", + "format": "date", "description": "The starting value of the date range in the ISO 8601 Date Format.", "example": "2021-12-01" }, "end": { "type": "string", + "format": "date", "description": "The ending value of the date range in the ISO 8601 Date Format.", "example": "2021-12-15" }, @@ -816,48 +994,50 @@ "properties": { "start": { "type": "string", + "format": "date", "description": "The starting value of the date range in the ISO 8601 Date Format.", "example": "2021-11-20" }, "end": { "type": "string", + "format": "date", "description": "The ending value of the date range in the ISO 8601 Date Format.", "example": "2021-11-20" }, "mon": { "type": "boolean", "description": "Monday, day of week value", - "example": "true" + "example": true }, "tue": { "type": "boolean", "description": "Tuesday, day of week value", - "example": "true" + "example": true }, "weds": { "type": "boolean", "description": "Wednesday, day of week value", - "example": "true" + "example": true }, "thur": { "type": "boolean", "description": "Thursday, day of week value", - "example": "true" + "example": true }, "fri": { "type": "boolean", "description": "Friday, day of week value", - "example": "true" + "example": true }, "sat": { "type": "boolean", "description": "Saturday, day of week value", - "example": "true" + "example": true }, "sun": { "type": "boolean", "description": "Sunday, day of week value", - "example": "true" + "example": true }, "invTypeCode": { "type": "string", @@ -871,61 +1051,6 @@ } } }, - "OTA_NotifRS": { - "type": "object", - "properties": { - "Errors": { - "type": "array", - "items": {} - } - } - }, - "Error": { - "type": "object", - "required": [ - "ewt_errorType", - "code", - "shortText", - "echoToken" - ], - "properties": { - "ewt_errorType": { - "type": "array", - "items": { - "$ref": "#/definitions/ewt_errorType" - } - }, - "code": { - "type": "string", - "description": "Refer to https://connect.booking.com/user_guide/site/en-US/codes-err/ for all codes" - }, - "shortText": { - "type": "string", - "description": "Short description of error." - }, - "echoToken": { - "type": "string" - } - } - }, - "ewt_errorType": { - "type": "string", - "enum": [ - "Unknown", - "No implementation", - "Biz rule", - "Authentication", - "Authentication timeout", - "Authorization", - "Protocol violation", - "Transaction model", - "Authentical model", - "Required field missing", - "Advisory", - "Processing exception", - "Application error" - ] - }, "ExceptionObj": { "type": "object", "properties": { @@ -982,89 +1107,88 @@ } } ] - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/instanceLink" - } - }, - "instanceLink": { - "type": "object", - "description": "Metadata describing link description objects that MAY appear in the JSON instance representation.", - "properties": { - "href": { - "description": "URI [RFC3986] or URI Template [RFC6570]. If the value is set to URI Template, then the \"templated\" property must be set to true.", - "type": "string" - }, - "rel": { - "description": "Name of the link relation that, in addition to the type property, can be used to retrieve link details. For example, href or profile.", - "type": "string" - }, - "templated": { - "description": "Boolean flag that specifies that \"href\" property is a URI or URI Template. If the property is a URI template, set this value to true. By default, this value is false.", - "type": "boolean", - "default": false - }, - "method": { - "description": "HTTP method for requesting the target of the link.", - "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "DELETE", - "PATCH", - "OPTIONS", - "HEAD" - ] - }, - "targetSchema": { - "description": "Link to the metadata of the resource, such as JSON-schema, that describes the resource expected when dereferencing the target resource..", - "type": "string" - }, - "operationId": { - "description": "The operationId of the path you can call to follow this link. This allows you to look up not only the path and method, but the description of that path and any parameters you need to supply.", - "type": "string" - }, - "title": { - "description": "Exact copy of the \"summary\" field on the linked operation.", - "type": "string" - } - } } }, "responses": { "400": { - "description": "Bad Request", + "description": "Request data provided is invalid", "schema": { - "$ref": "#/definitions/ExceptionObj" + "$ref": "#/definitions/ExceptionDetail" } }, "401": { - "description": "Unauthorized" + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "403": { - "description": "Forbidden" + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "404": { - "description": "Resource not found", + "description": "Not Found", "schema": { - "$ref": "#/definitions/ExceptionObj" + "$ref": "#/definitions/ExceptionDetail" } }, "405": { - "description": "Method not allowed" + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } }, "500": { - "description": "System Error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", "schema": { - "$ref": "#/definitions/ExceptionObj" + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" } } }, - "securityDefinitions": {}, - "tags": [], + "tags": [ + { + "name": "ARI Publication", + "description": " The ARI Publication service provides ability to send distribution partners with hotel property inventory level, room rates, and restrictions." + } + ], "externalDocs": { "description": "Find out more about Oracle Hospitality", "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" diff --git a/rest-api-specs/distribution/outbound/distributioncontentnotification.json b/rest-api-specs/distribution/outbound/distributioncontentnotification.json new file mode 100644 index 0000000..1f091b9 --- /dev/null +++ b/rest-api-specs/distribution/outbound/distributioncontentnotification.json @@ -0,0 +1,360 @@ +{ + "swagger": "2.0", + "info": { + "title": "OPERA Cloud Distribution Content Notification", + "version": "25.1.0.0", + "description": "Oracle Hospitality Distribution Content notification message specification for distribution partners to receive in real time property content, channel room and rate updates. Partner receives this message will respond with success or error/warning so that property/CRS user can see the status of message delivery in OPERA. A channel code identifier is required in Oracle Hospitality Distribution to receive those messages.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "contact": { + "email": "hospitality_apis_ww_grp@oracle.com" + }, + "license": { + "name": "UPL", + "url": "https://opensource.org/licenses/upl" + }, + "termsOfService": "https://www.oracle.com/legal/terms.html" + }, + "basePath": "/notification/v1", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/content": { + "post": { + "responses": { + "201": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + }, + "Location": { + "type": "string", + "description": "Location of process status resource" + } + }, + "description": "Response for publishing content" + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + }, + "summary": "Content Notification", + "operationId": "postContent", + "description": "This message will provide channel property contentOperationId:postContent
", + "tags": [ + "Content Notification" + ], + "parameters": [ + { + "name": "Authorization", + "description": "Bearer token that needs to be passed which is generated post user authentication", + "type": "string", + "in": "header", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ChannelContent" + } + } + ], + "produces": [ + "application/json" + ] + } + } + }, + "definitions": { + "UniqueId": { + "type": "string", + "description": "The unique identifier element allows the trading partners to uniquely identify each request of the same message, (i.e. the entire message) for transaction traceability", + "example": "234512-3432-234234234" + }, + "Timestamp": { + "type": "string", + "format": "DATE_TIME", + "description": "Indicates the creation date and time of the message in UTC using the following format specified by ISO 8601; YYYY-MM-DDThh:mm:ss.zzzZ with time values using the 24 hour clock (e.g. 20 November 2003, 1:59:38 pm UTC becomes 2003-11-20T13:59:38.000Z).", + "example": "2021-11-20T13:59:38.000Z" + }, + "ExceptionObj": { + "type": "object", + "properties": { + "logId": { + "type": "integer", + "example": 884366976 + }, + "title": { + "type": "string", + "description": "Short, human-readable summary of the problem. The summary SHOULD NOT change for subsequent occurrences of the problem, except for purposes of localization." + }, + "status": { + "type": "integer", + "description": "HTTP status code for this occurrence of the problem, set by the origin server.", + "example": 400 + }, + "o.errorCode": { + "type": "string", + "description": "HDP error code, which is different from HTTP error code.", + "example": "DARI00001" + }, + "type": { + "type": "string", + "description": "Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem.", + "example": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.x" + }, + "timestamp": { + "type": "string", + "example": "2021-09-17T08:17:18.321Z", + "format": "date-time" + } + }, + "required": [ + "logId", + "title", + "status" + ] + }, + "ExceptionDetail": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ExceptionObj" + }, + { + "type": "object", + "properties": { + "o.errorDetails": { + "type": "array", + "items": { + "$ref": "#/definitions/ExceptionObj" + } + } + } + } + ] + }, + "ChannelContent": { + "description": "The object provides the channel content detail.", + "type": "object", + "properties": { + "moduleName": { + "type": "string", + "example": "ChannelContent" + }, + "actionType": { + "type": "string", + "description": "The action type for the event", + "example": "UPDATE CHANNEL ROOM TYPE" + }, + "uniqueId": { + "$ref": "#/definitions/UniqueId" + }, + "timeStamp": { + "$ref": "#/definitions/Timestamp" + }, + "enterpriseId": { + "type": "string", + "description": "The Enterprise ID of the property it belongs to", + "example": "ENTERPRISEID" + }, + "hotelCode": { + "type": "string", + "description": "A unique identifier value for the property/hotel associated with channel", + "minLength": 1, + "maxLength": 50, + "example": "HOTELCODE" + }, + "channelCode": { + "type": "string", + "description": "Code for the channel which is receiving published data.", + "minLength": 1, + "maxLength": 50, + "example": "CHANNELCODE" + }, + "transactionKey": { + "type": "array", + "items": { + "$ref": "#/definitions/TransactionKeyDetail" + } + } + } + }, + "TransactionKeyDetail": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "roomType" + }, + "value": { + "type": "string", + "example": "ROOMTYPECODE" + } + } + } + }, + "responses": { + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + }, + "tags": [ + { + "name": "Content Notification", + "description": " The Content Notification service provides ability to send distribution partners with hotel property inventory level, room rates, and restrictions." + } + ], + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } +} \ No newline at end of file diff --git a/rest-api-specs/distribution/outbound/distributionoutboundlookup.json b/rest-api-specs/distribution/outbound/distributionoutboundlookup.json new file mode 100644 index 0000000..df0386e --- /dev/null +++ b/rest-api-specs/distribution/outbound/distributionoutboundlookup.json @@ -0,0 +1,589 @@ +{ + "swagger": "2.0", + "info": { + "title": "OPERA Cloud Distribution Outbound Lookup", + "version": "25.1.0.0", + "description": "Oracle Hospitality Distribution External Lookup is to get rate plan and room types from external channel partners.This document and all content within is available under the Universal Permissive License v 1.0 (https://oss.oracle.com/licenses/upl). Copyright (c) 2020, 2025 Oracle and/or its affiliates.
", + "contact": { + "email": "hospitality_apis_ww_grp@oracle.com" + }, + "license": { + "name": "UPL", + "url": "https://opensource.org/licenses/upl" + }, + "termsOfService": "https://www.oracle.com/legal/terms.html" + }, + "basePath": "/lookup/v1", + "schemes": [ + "https" + ], + "produces": [ + "application/json; charset=utf-8" + ], + "paths": { + "/hotels/{hotelCode}/externalRoomTypes": { + "get": { + "summary": "Get External Room Types", + "operationId": "getExternalRoomTypes", + "description": "Provide an ability to get room types information from a channel partner to OPERA Cloud Distribution.", + "tags": [ + "Lookup" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/hotelCode" + }, + { + "$ref": "#/parameters/channelCode" + }, + { + "$ref": "#/parameters/lang" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "produces": [ + "application/json; charset=utf-8" + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "OK", + "schema": { + "$ref": "#/definitions/ExternalRoomTypesResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "411": { + "description": "Length Required", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + }, + "/hotels/{hotelCode}/externalRatePlans": { + "get": { + "summary": "Get External Rate Plans", + "operationId": "getExternalRatePlans", + "description": "Provide an ability to get rate plan codes information from a channel partner to OPERA Cloud Distribution.", + "tags": [ + "Lookup" + ], + "parameters": [ + { + "$ref": "#/parameters/authorization" + }, + { + "$ref": "#/parameters/hotelCode" + }, + { + "$ref": "#/parameters/channelCode" + }, + { + "$ref": "#/parameters/roomType" + }, + { + "$ref": "#/parameters/lang" + }, + { + "$ref": "#/parameters/limit" + }, + { + "$ref": "#/parameters/offset" + } + ], + "produces": [ + "application/json; charset=utf-8" + ], + "responses": { + "200": { + "headers": { + "Content-Language": { + "type": "string", + "description": "Audience language", + "pattern": "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*", + "x-example": "en-GB" + } + }, + "description": "OK", + "schema": { + "$ref": "#/definitions/ExternalRatePlansResponse" + } + }, + "400": { + "description": "Request data provided is invalid", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "405": { + "description": "Not Allowed", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "406": { + "description": "Not Acceptable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "411": { + "description": "Length Required", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "413": { + "description": "Payload Too Large", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "414": { + "description": "URI Too Long", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "415": { + "description": "Unsupported Media Type", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "502": { + "description": "Bad Gateway", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/ExceptionDetail" + } + } + } + } + } + }, + "parameters": { + "authorization": { + "name": "authorization", + "description": "A Basic authentication header using the base64 hash of your Client user and Client password in the format base64 encoded to the Basic Access Authorization standard.", + "type": "string", + "in": "header", + "required": true + }, + "hotelCode": { + "name": "hotelCode", + "type": "string", + "description": "A unique identifier value for the property/hotel associated with a channel.", + "in": "path", + "required": true, + "minLength": 1, + "maxLength": 50, + "x-example": "XUSXXYY99" + }, + "channelCode": { + "name": "channelCode", + "type": "string", + "description": "A unique identifier value for the channel associated with a property/hotel.", + "in": "query", + "required": false, + "minLength": 1, + "maxLength": 50, + "x-example": "CH1" + }, + "roomType": { + "name": "roomType", + "type": "string", + "description": "The OPERA Cloud Hotel/proeprty Room type code.", + "in": "query", + "required": false, + "minLength": 1, + "x-example": "XA1K" + }, + "lang": { + "name": "lang", + "in": "query", + "description": "ISO639 / BCP 47 language code format.", + "required": false, + "type": "string", + "x-example": "en-US" + }, + "limit": { + "name": "limit", + "in": "query", + "description": "Indicates maximum number of records a Web Service should return in the response. Maximum record limit is 1000.", + "required": true, + "type": "integer", + "maximum": 1000, + "default": 1000, + "x-example": 1000 + }, + "offset": { + "name": "offset", + "in": "query", + "description": "Index or initial index of the set(page) being requested. If the index goes out of the bounds of the total set count then no data will be returned.", + "required": true, + "type": "integer", + "x-example": 1 + } + }, + "definitions": { + "ExternalRoomTypesResponse": { + "type": "object", + "properties": { + "property": { + "type": "object", + "$ref": "#/definitions/Property" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/RoomTypeItem" + } + }, + "hasMore": { + "type": "boolean", + "example": true, + "description": "Indicates whether all the records are included in the response or not. Absence of the attribute values should be consider as all rows fetched in the response." + }, + "totalResults": { + "type": "integer", + "example": 300, + "description": "Total number of records queried." + }, + "limit": { + "type": "integer", + "example": 200, + "description": "Indicates maximum number of records a Web Service should return in the response." + }, + "count": { + "type": "integer", + "example": 100, + "description": "Total number of rows returned." + }, + "offset": { + "type": "integer", + "example": 0, + "description": "Index or initial index of the set(page) being requested. If the index goes out of the bounds of the total set count then no data will be returned." + } + } + }, + "ExternalRatePlansResponse": { + "type": "object", + "properties": { + "property": { + "type": "object", + "$ref": "#/definitions/Property" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/RatePlanItem" + } + }, + "hasMore": { + "type": "boolean", + "example": true, + "description": "Indicates whether all the records are included in the response or not. Absence of the attribute values should be consider as all rows fetched in the response." + }, + "totalResults": { + "type": "integer", + "example": 300, + "description": "Total number of records queried." + }, + "limit": { + "type": "integer", + "example": 200, + "description": "Indicates maximum number of records a Web Service should return in the response." + }, + "count": { + "type": "integer", + "example": 100, + "description": "Total number of rows returned." + }, + "offset": { + "type": "integer", + "example": 0, + "description": "Index or initial index of the set(page) being requested. If the index goes out of the bounds of the total set count then no data will be returned." + } + } + }, + "Property": { + "type": "object", + "properties": { + "hotelCode": { + "type": "string", + "example": "XUSXXYY99", + "description": "A unique identifier value for the property/hotel associated with a channel." + }, + "channelCode": { + "type": "string", + "example": "CH1", + "description": " A code for the channel partner that is set up in the Oracle Hospitality Distribution." + } + }, + "required": [ + "hotelCode", + "channelCode" + ] + }, + "RoomTypeItem": { + "type": "object", + "properties": { + "room": { + "type": "object", + "$ref": "#/definitions/Room" + }, + "occupancy": { + "type": "object", + "$ref": "#/definitions/Occupancy" + } + }, + "required": [ + "room" + ] + }, + "RatePlanItem": { + "type": "object", + "properties": { + "ratePlan": { + "type": "object", + "$ref": "#/definitions/RatePlan" + } + }, + "required": [ + "ratePlan" + ] + }, + "Room": { + "type": "object", + "properties": { + "roomType": { + "type": "string", + "example": "XA1K", + "description": "The code for the room type." + }, + "roomName": { + "type": "string", + "example": "102", + "description": "Name of the room type." + }, + "description": { + "type": "string", + "example": "Deluxe King Room on my Channel.", + "description": "Description of the room type." + } + }, + "required": [ + "roomType" + ] + }, + "RatePlan": { + "type": "object", + "properties": { + "ratePlanCode": { + "type": "string", + "example": "XDAILY", + "description": "The code for a rate plan." + }, + "ratePlanName": { + "type": "string", + "example": "Corporate", + "description": "The name of the rate plan." + }, + "ratePlanDescription": { + "type": "string", + "example": "Daily discount for a corporation.", + "description": "Description of the rate plan code." + } + }, + "required": [ + "ratePlanCode" + ] + }, + "Occupancy": { + "type": "object", + "properties": { + "maxOccupancy": { + "type": "integer", + "example": 3, + "description": "The maximum number of individuals allowed in the room type." + }, + "maxAdultOccupancy": { + "type": "integer", + "example": 3, + "description": "The maximum number of adults allowed in the room type." + }, + "maxChildOccupancy": { + "type": "integer", + "example": 2, + "description": "The maximum number of children allowed in the room type." + } + } + }, + "ExceptionDetail": { + "description": "Common Error Response format.", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Short, human-readable summary of the problem. The summary SHOULD NOT change for subsequent occurrences of the problem, except for purposes of localization.", + "example": "Error in Application" + }, + "status": { + "type": "integer", + "description": "HTTP status code for this occurrence of the problem, set by the origin server.", + "example": 400 + }, + "o:errorCode": { + "type": "string", + "description": "Business specific Error code, which is different from HTTP error code.", + "example": "RSV-34534534" + }, + "type": { + "type": "string", + "description": "Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem.", + "example": "http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The UTC Date and Time of the Error happened.", + "example": "2022-01-02T11: 30: 22.234Z" + }, + "o:errorDetails": { + "description": "Details of the error message, consisting of a hierarchical tree structure.", + "type": "array", + "items": { + "$ref": "#/definitions/ExceptionDetail" + } + }, + "logId": { + "type": "integer", + "description": "An ID for support reasons to be able identify errors better.", + "example": "334543532224" + } + } + } + }, + "externalDocs": { + "description": "Find out more about Oracle Hospitality", + "url": "https://docs.oracle.com/en/industries/hospitality/integration_platforms.html" + } +} \ No newline at end of file