{ "swagger": "2.0", "info": { "description": "An upsell service that can be consumed to display upgrade offers to a hotel guest prior to arrival. Pre-arrival upsells are becoming increasingly important due to the adoption of mobile and kiosk check-in which reduces the opportunity for front-desk upselling. Upgrade offers are based on PRiME(R) AI/ML decision intelligence and OPERA real-time inventory. The service allows instant fulfillment of the upgrade offer.

Compatible with OPERA Cloud release 26.2.0.0.

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, 2026 Oracle and/or its affiliates.

", "version": "26.2.0.0", "title": "Nor1 Integrated Upsell API", "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" } }, "host": "oracle.api.com", "basePath": "/ohcgep/v1", "tags": [ { "name": "Nor1 Integrated Upsell API", "description": "API to serve Upsell offers to customers and third parties" } ], "schemes": [ "https" ], "parameters": { "accept": { "name": "Accept", "in": "header", "required": true, "type": "string", "enum": ["application/json; charset=UTF-8", "application/json"], "x-example": "application/json; charset=UTF-8" }, "acceptForPost": { "name": "consumes", "in": "header", "type": "string", "enum": ["application/json; charset=UTF-8", "application/json"], "x-example": "application/json" }, "authorization": { "name": "Authorization", "in": "header", "type": "string", "x-example": "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "x-app-key": { "name": "x-app-key", "in": "header", "type": "string", "x-example": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "providerId": { "name": "providerId", "in": "header", "type": "string", "x-example": "SAN", "description": "Partner's Unique Nor1 Provider ID" }, "Accept-Language": { "name": "Accept-Language", "in": "header", "type": "string", "description": "Language code" } }, "paths": { "/hotels/{hotelId}/reservations/{reservationId}/arrivalDate/{arrivalDate}/upsellOffers": { "get": { "summary": "Get Upsell Offers for a reservation", "description": "This API will allow a user to retrieve a retrieve a list of available upsell offers based on the search criteria specified in the request body, inventory availability and current reservation details.\n

OperationId: getUpsellOffers

", "operationId": "getUpsellOffers", "tags": ["Upsell Offers"], "produces": ["application/json; charset=UTF-8"], "parameters": [ { "$ref": "#/parameters/accept" }, { "$ref": "#/parameters/authorization" }, { "$ref": "#/parameters/x-app-key" }, { "$ref": "#/parameters/providerId" }, { "$ref": "#/parameters/Accept-Language" }, { "name": "hotelId", "in": "path", "required": true, "type": "string", "x-example": "SAND01", "pattern": "^[A-Z0-9]{6-10}$", "description": "Unique ID of the hotel where reservation is searched based on reservation Id." }, { "name": "reservationId", "in": "path", "required": true, "type": "string", "x-example": "17158", "pattern": "^[0-9]{5-7}$", "description": "A unique identifying value for reservation assigned by the creating system." }, { "name": "arrivalDate", "in": "path", "required": true, "type": "string", "x-example": "2022-03-28", "format": "date", "description": "Arrival Date of the reservation." } ], "responses": { "200": { "description": "Successful Response", "headers": { "Content-Language": { "type": "string", "description": "Audience language", "x-example": "en-GB" } }, "schema": { "$ref": "#/definitions/UpsellOffers" } }, "204": { "description": "No Offers Found" }, "404": { "description": "Unable to find HotelId or ReservationId", "schema": { "$ref": "#/definitions/errorInstanceNF" } }, "500": { "description": "System Error", "schema": { "$ref": "#/definitions/errorInstanceISE" } }, "502": { "description": "Bad Gateway" }, "503": { "description": "Service Unavailable" } } }, "post": { "summary": "Post Upsell Offers for a reservation", "description": "This API allows user to update a reservation by fulfilling an upsell offer selected from the list of available upsell offers, based on the unique offer ID provided in the request body.\n\nIf an upsell offer group has `selectionType` set to `zero_to_one`, the user can choose only one offer under a specific `offerType` group. To process multiple offers, submit a API request for a `offer` selected\n\nIf an upsell offer group has `selectionType` set to `zero_to_many`, the user can choose multiple offers under a specific `offerType` group. To process multiple offers, submit a separate API request for each `offer` selected\n

OperationId: postUpsellOffers

", "operationId": "postUpsellOffers", "tags": [ "API to Fulfill Upsell Offers to customers and third parties" ], "produces": ["application/json; charset=UTF-8"], "parameters": [ { "$ref": "#/parameters/acceptForPost" }, { "$ref": "#/parameters/authorization" }, { "$ref": "#/parameters/x-app-key" }, { "$ref": "#/parameters/providerId" }, { "$ref": "#/parameters/Accept-Language" }, { "name": "hotelId", "in": "path", "required": true, "type": "string", "x-example": "SAND01", "pattern": "^[A-Z0-9]{6-10}$", "description": "Unique ID of the hotel where reservation is searched based on reservation Id." }, { "name": "reservationId", "in": "path", "required": true, "type": "string", "x-example": "17158", "pattern": "^[0-9]{5-7}$", "description": "A unique identifying value for reservation assigned by the creating system." }, { "name": "arrivalDate", "in": "path", "required": true, "type": "string", "x-example": "2022-03-28", "format": "date", "description": "Arrival Date of the reservation." }, { "name": "body", "in": "body", "required": true, "description": "", "schema": { "$ref": "#/definitions/Item" } } ], "responses": { "200": { "description": "Successful Response", "schema": { "$ref": "#/definitions/UpsellOffers" } }, "415": { "description": "Unsupported Media Type", "schema": { "$ref": "#/definitions/errorInstanceUMT" } }, "404": { "description": "Unable to find HotelId or ReservationId", "schema": { "$ref": "#/definitions/errorInstanceNF" } }, "500": { "description": "System Error", "schema": { "$ref": "#/definitions/errorInstanceISE" } }, "502": { "description": "Bad Gateway" }, "503": { "description": "Service Unavailable" } } } } }, "definitions": { "UpsellOffers": { "type": "object", "description": "Success and Failure Summary Data", "properties": { "Items": { "type": "array", "items": { "$ref": "#/definitions/Items" } }, "totalResults": { "type": "number", "example": 1 }, "offset": { "type": "number", "example": 0 }, "count": { "type": "number", "example": 1 }, "hasMore": { "type": "boolean", "example": false }, "limit": { "type": "number", "example": 0 } } }, "Items": { "type": "object", "description": "Success and Failure Summary Data", "properties": { "upsellOffers": { "type": "array", "items": { "$ref": "#/definitions/UpsellOffer" } } } }, "UpsellOffer": { "type": "object", "properties": { "offerType": { "type": "string", "example": "room_upgrade", "description": "Describes type of an offer.\n\nPossible values: \n - room_upgrade\n - early_checkin\n - late_checkout\n - amenity\n - spa_services\n - extra_room\n - extra_day\n - food_beverage\n - room_feature\n - parking" }, "selectionType": { "type": "string", "description": "", "example": "zero_to_one", "enum": ["zeroToOne", "zeroToMany"] }, "offers": { "type": "array", "items": { "$ref": "#/definitions/Offers" } } } }, "Offers": { "type": "object", "properties": { "offerId": { "type": "string", "format": "uuid", "description": "A unique upsell ID per upsell offer" }, "name": { "type": "string", "example": "Deluxe King Suite", "description": "offer name" }, "description": { "type": "string", "example": "Rest easy in the 600-square-foot suite with sitting area and cityscape views. Enjoy pillow top mattress, pull out sofa bed, premium mini bar, 24 hour room service, and a large marble bathroom." }, "images": { "$ref": "#/definitions/Image" }, "price": { "type": "object", "properties": { "amount": { "type": "number", "example": 33.94 }, "currency": { "type": "string", "description": "This is an ISO 4217(https://en.wikipedia.org/wiki/ISO_4217) currency code.", "example": "USD" } } }, "savings": { "type": "string", "example": "16.06" }, "chargeFrequency": { "type": "string", "description": "chargeFrequency defines how often the upgrade charge is applied. \n\nPossible values: \n - per_unit_per_night\n - per_unit_per_stay\n - per_person_per_stay\n - per_person_per_night", "example": "per_unit_per_night" }, "fixedCharge": { "type": "number", "example": 33.94 }, "roomTypeCode": { "type": "array", "items": { "type": "string", "example": "SGL" } } } }, "Image": { "type": "object", "properties": { "big": { "type": "string", "example": "https://example.com/img_url1.jpg" }, "small": { "type": "string", "example": "https://example.com/img_url2.jpg" } } }, "Item": { "type": "object", "properties": { "offerId": { "type": "string", "format": "uuid" } } }, "errorDetail": { "type": "object", "description": "Complex type that contains error detail", "properties": { "title": { "type": "string", "description": "Holds error details in short" }, "detail": { "type": "string", "description": "Holds error details" }, "errorCode": { "type": "string", "description": "Holds specific error code" } } }, "errorInstanceISE": { "type": "object", "description": "Complex type that contains internal server error instance details for a REST call", "properties": { "type": { "type": "string", "description": "Holds error type", "example": "https://www.example.org/protocols/.." }, "title": { "type": "string", "description": "Holds error details in short", "example": "Internal Server Error" }, "status": { "type": "number", "example": 500 }, "detail": { "type": "string", "description": "Holds error details", "example": "Internal Server Error" }, "errorCode": { "type": "string", "description": "Holds specific error code", "example": null }, "errorDetails": { "type": "array", "description": "Holds List of errors", "items": { "$ref": "#/definitions/errorDetail" } } } }, "errorInstanceNF": { "type": "object", "description": "Complex type that contains not found error instance details for a REST call", "properties": { "type": { "type": "string", "description": "Holds error type", "example": "https://www.example.org/protocols/.." }, "title": { "type": "string", "description": "Holds error details in short", "example": "Not Found" }, "status": { "type": "number", "example": 404 }, "detail": { "type": "string", "description": "Holds error details", "example": "Unable to find HotelId or ReservationId" }, "errorCode": { "type": "string", "description": "Holds specific error code", "example": null }, "errorDetails": { "type": "array", "description": "Holds List of errors", "items": { "$ref": "#/definitions/errorDetail" } } } }, "errorInstanceUMT": { "type": "object", "description": "Complex type that contains refuse request error instance details for a REST call", "properties": { "type": { "type": "string", "description": "Holds error type", "example": "https://www.example.org/protocols/.." }, "title": { "type": "string", "description": "Holds error details in short", "example": "Unsupported Media Type" }, "status": { "type": "number", "example": 415 }, "detail": { "type": "string", "description": "Holds error details", "example": "Unsupported Media Type" }, "errorCode": { "type": "string", "description": "Holds specific error code", "example": null } } } } }