Inventory Management

Inventory management in OPERA Cloud involves retrieving and analyzing inventory data for a hotel, including fetching inventory statistics for a specified date range and revenue inventory statistics for past, present, and future reservations. It also includes creating and posting sell limits to OPERA Cloud, ensuring optimal room availability and maximizing revenue through strategic inventory controls.

Figure 4-6 Inventory Management Workflow


This image shows the inventory management workflow.

Sell Limits in OPERA Cloud

Sell Limits let you control room availability at your property and change the inventory limits (oversell or undersell) at a property for given date/room type. You can configure sell limits from the Property Availability screen in the Inventory section of the OPERA Cloud application. For more information, refer to the Sell Limits topic in the OPERA Cloud Distribution User Guide.  

Use Cases

Use Case Description Operation
Retrieve Inventory Statistics You can retrieve inventory statistics for a specific property for a given date range. These statistics are crucial for revenue management systems (RMS) to analyze past performance, monitor current trends, and forecast future inventory needs. getInventoryStatistics (synchronous)
Retrieving the Revenue Inventory Statistics You can retrieve the revenue inventory statistics for the past, present, and future reservations from OPERA Cloud. You will be able to filter using stay date (with a start and end date) to fetch inventory data. You can group the data either by Room Type, Market Code, or Guarantee Code (Reservation Type) or you can gather data per date for the entire property.

getRevenueInventoryStatistics (asynchronous)

Creating Sell Limits You can set the sell limits for a hotel by posting the data to OPERA Cloud. You will be able to specify the date range for which the sell limits apply and define limits either for the entire property by room type or by room class. This ensures precise control over room inventory, helping to optimize availability and maximize revenue.

postSellLimitsProcess

1. Retrieving Inventory Statistics using getInventoryStatistics

The synchronous operation getInventoryStatistics can be used to retrieve comprehensive inventory statistics for a property in a specified date range. The data can include various metrics related to room availability, sell limits, and occupancy rates. This is essential for managing room availability, occupancy, and optimizing revenue management strategies.

Business Logic Comments
Retrieving the Inventory Statistics

The inventory statistics can be retrieved using specific parameters to gather data for a specified date range.

hotelId: Specifies the hotel for which inventory statistics are being retrieved.

You can send the specific inventory details to be fetched with the following parameters:

  • dateRangeStart: The starting date for the inventory statistics period.
  • dateRangeEnd: The ending date for the inventory statistics period.
  • groupBy: Specifies how to group the data, such as by Room Type, Market Code, or Guarantee Code (Reservation Type).
  • roomType: Filters the inventory data by specific room types.
  • marketCode: Filters the inventory data by market codes.
  • guaranteeCode: Filters the inventory data by guarantee codes.
  • propertyLevel: Boolean to indicate if the data should be gathered for the entire property.
Key Considerations
  • The hotelId parameter is essential to identify which hotel's inventory statistics are being retrieved.
  • Specify the exact dateRangeStart and dateRangeEnd to ensure accurate and comprehensive data retrieval.
  • Use the groupBy parameter to organize data meaningfully (for example, by Room Type, Market Code, Guarantee Code) for detailed analysis.
  • Filter by roomType, marketCode, and guaranteeCode to obtain specific insights, helping tailor inventory strategies.
  • Set the propertyLevel flag accurately to decide if the data should be aggregated for the entire property or filtered by specific criteria.
  • Validate the retrieved inventory statistics through the RMS to ensure they align with the intended operational and revenue strategies.
Key Response Data Elements

The key response data elements include:

  • hotelId: The ID of the hotel for which inventory statistics are retrieved.
  • dateRangeStart: The starting date of the inventory statistics period.
  • dateRangeEnd: The ending date of the inventory statistics period.
  • groupBy: Specifies how the data is grouped for example, Room Type, Market Code, Guarantee Code).
  • inventoryCounts: Detailed counts of inventory for each grouping:
    • availableRooms: Number of rooms available.
    • bookedRooms: Number of rooms booked.
    • outOfOrderRooms: Number of rooms out of order.
Sample API request/response

getInventoryStatistics

Endpoint: 

{{HostName}}/inv/v1/hotels/{{HotelId}}/inventoryStatistics

 

Sample Successful (200 OK) Response:
{
   "getInventoryStatistics":{
      "response":[
         {
            "statistics":[
               {
                  "statisticDate":[
                     {
                        "statisticDate":"2020-01-25",
                        "weekendDate":false
                     },
                     {
                        "statisticDate":"2020-01-26",
                        "weekendDate":false
                     }
                  ],
                  "statCode":"HOTEL1",
                  "statCategoryCode":"HotelCode"
               },
               {
                  "statisticDate":[
                     {
                        "inventory":[
                           {
                              "value":"1",
                              "code":"SequenceId"
                           }
                        ],
                        "statisticDate":"2020-01-25",
                        "weekendDate":false
                     },
                     {
                        "inventory":[
                           {
                              "value":"1",
                              "code":"SequenceId"
                           }
                        ],
                        "statisticDate":"2020-01-26",
                        "weekendDate":false
                     }
                  ],
                  "statCode":"CSTND",
                  "statCategoryCode":"HotelRoomCode",
                  "statCodeClass":"STDCOMP",
                  "description":"Component Room - Standard"
               },
               {
                  "statisticDate":[
                     {
                        "statisticDate":"2020-01-25",
                        "weekendDate":false
                     },
                     {
                        "statisticDate":"2020-01-26",
                        "weekendDate":false
                     }
                  ],
                  "statCode":"STD",
                  "statCategoryCode":"HotelRoomCode",
                  "statCodeClass":"ALL",
                  "description":"Standard Room"
               }
            ],
            "hotelName":"HOTEL1",
            "reportCode":"RoomsAvailabilitySummary"
         }
      ]
   }
}        

2. Retrieving the Revenue Inventory Statistics using getRevenueInventoryStatistics

The asynchronous operation getRevenueInventoryStatistics endpoint retrieves detailed revenue inventory data for a property, which includes past, present, and future reservations. This data helps analyze revenue trends, manage inventory effectively, and make informed strategic decisions for optimizing room availability and pricing.

Business Logic Comments
Retrieving the Revenue Inventory Statistics

The revenue inventory statistics can be retrieved using specific parameters to gather data for a specified date range:

hotelId: Specifies the hotel for which revenue inventory statistics are being retrieved.

You can send the specific revenue inventory details to be fetched with the following parameters:

  • dateRangeStart: The starting date for the revenue inventory statistics period.
  • dateRangeEnd: The ending date for the revenue inventory statistics period.
  • roomType: Filters the revenue inventory data by specific room types.
  • marketCode: Filters the revenue inventory data by market codes.
  • guaranteeCode: Filters the revenue inventory data by guarantee codes.
  • propertyLevel: Boolean to indicate if the data should be gathered for the entire property.
Key Considerations
  • The hotelId parameter is crucial to ensure that statistics are retrieved for the correct hotel.
  • Specify accurate dateRangeStart and dateRangeEnd to cover the relevant period for analysis.
  • Filter by roomType, marketCode, and guaranteeCode to get specific revenue insights based on room types, market segments, and reservation guarantees.
  • Set the propertyLevel flag appropriately to determine whether to aggregate data at the property level or by specific criteria.
Key Response Data Elements

The key response data elements include:

  • hotelId: The ID of the hotel for which revenue inventory statistics are retrieved.
  • dateRangeStart: The start date of the period for which statistics are reported.
  • dateRangeEnd: The end date of the period for which statistics are reported.
  • roomType: The type of room for which revenue inventory statistics are reported.
  • marketCode: The market segment associated with the revenue inventory data.
  • guaranteeCode: The reservation type or guarantee code associated with the revenue inventory data.
  • revenueCounts: Detailed counts and statistics related to revenue:
    • totalRevenue: The total revenue generated.
    • roomRevenue: Revenue generated specifically from room bookings.
    • foodBeverageRevenue: Revenue generated from food and beverage sales.
    • otherRevenue: Revenue from other sources.
  • occupancyRates: Statistics related to occupancy:
    • occupiedRooms: The number of rooms occupied.
    • availableRooms: The number of rooms available.
    • occupancyPercentage: The percentage of rooms occupied.
Sample API request/response
1. startRevenueInventoryStatisticsProcess
Endpoint:

POST {{HostName}}/inv/async/v1/externalSystems/{{ExternalSystemId}}/hotels/{{HotelId}}/revenueInventoryStatistics


Request body:
{
    "dateRangeStart": "2023-06-23",
    "dateRangeEnd": "2023-06-25",
    "roomTypes": [
        ""
    ]
}


Sample Successful Response:

202 Accepted
2. getRevenueInventoryStatisticsProcessStatus
Endpoint:

HEAD {{HostName}}/inv/async/v1/externalSystems/{{ExternalSystemId}}/hotels/{{HotelId}}/revenueInventoryStatistics/{{RequestId1}}


Sample Request cURL:

curl --location --head '{{HostName}}/inv/async/v1/externalSystems/{{ExternalSystemId}}/hotels/{{HotelId}}/revenueInventoryStatistics/{{RequestId1}}' \
--header 'Content-Type: application/json' \
--header 'x-hotelId: {{HotelId}}' \
--header 'x-app-key: {{AppKey}}' \
--header 'Authorization: Bearer {{Token}}' \
--data ''


Sample Successful Response:

201 Created
(You are ready to proceed to Step 3)
3. getRevenueInventoryStatistics
Endpoint:

GET {{HostName}}/rtp/async/v1/externalSystems/{{ExtSystemCode}}/hotels/{{HotelId}}/rates/hurdles/{{RequestId2}}


Sample Successful (200 OK) Response:
{
    "revInvStats": [
        {
            "property": "BAA_AUTO",
            "occupancyDate": "2023-06-23",
            "physicalRooms": "290",
            "noShowRooms": "4"
        },
        {
            "property": "BAA_AUTO",
            "occupancyDate": "2023-06-24",
            "physicalRooms": "290",
            "noShowRooms": "1"
        },
        {
            "property": "BAA_AUTO",
            "occupancyDate": "2023-06-25",
            "physicalRooms": "290"
        }
    ]
}

3. Creating Sell Limits using postSellLimitsProcess

The asynchronous operation postSellLimits allows setting maximum room sell limits for a specified date range, room type, or room class in OPERA Cloud. This operation helps RMS manage room inventory effectively, prevent overbooking, and optimize revenue by ensuring accurate and controlled room availability across different sales channels.

Business Logic Comments
Posting the Sell Limits

The sell limits can be set using specific parameters to control the maximum number of rooms that can be sold for a specified date range.

hotelId: Specifies the hotel for which sell limits are being set.

You can send the specific sell limit details to be posted with the following information:

  • sellLimitDate: The date for which the sell limit is to be applied.
  • roomType: The type of room to which the sell limit applies.
  • roomClass: The class of the room to which the sell limit applies.
  • sellLimitCategory: The category for sell limits, such as house, room type, or room class.
  • sellLimitAmount: The maximum number of rooms that can be sold.
  • sellLimitType: Indicates if the sell limit is a flat number or a percentage.
  • bookingChannel: Specifies the booking channel for which the sell limit applies.
  • override: A flag indicating if the sell limit should override existing limits.
Key Considerations
  • The hotelId parameter is essential to identify which hotel's sell limits are being set or updated.
  • Specify the exact sellLimitDate to ensure accurate implementation and avoid overlaps or gaps in sell limits.
  • Use the sellLimitCategory to apply limits at the house, room type, or room class level for precise control over inventory.
  • Set the sellLimitAmount accurately to control the maximum number of rooms that can be sold and optimize room availability.
  • Define whether the sellLimitType is a flat number or percentage to ensure the limit is applied correctly.
  • Include relevant roomType and roomClass values to apply sell limits to specific categories of rooms.
  • Specify the bookingChannel to control which channels the sell limits apply to, optimizing revenue management across different sales channels.
  • Use the override flag judiciously to determine whether the sell limit should override existing limits, preventing unintended conflicts.
Validation Validate the applied sell limits through the RMS to ensure they match the intended configurations and do not conflict with other limits or booking policies.
Sample API request/response
1. postSellLimitsProcess
Endpoint:

POST {{HostName}}/inv/async/v1/externalSystems/{{ExtSystemCode}}/hotels/{{HotelId}}/sellLimits


Request body:
[
    {
        "houseSellLimits": [
            {
                "date": "2024-05-14",
                "amount": 0,
                "flatOrPercentage": "Flat"
            }
        ],
        "roomTypeSellLimits": [
            {
                "date": "2024-05-14",
                "amount": 0,
                "flatOrPercentage": "Flat",
                "roomType": "string"
            }
        ],
        "roomClassSellLimits": [
            {
                "date": "2024-05-14",
                "amount": 0,
                "flatOrPercentage": "Flat",
                "roomClass": "string"
            }
        ]
    }
]


Sample Successful Response:

202 Accepted
2. getSellLimitsProcessStatus
Endpoint:

HEAD {{HostName}}/inv/async/v1/externalSystems/{{ExtSystemCode}}/hotels/{{HotelId}}/sellLimits/{{RequestId1}}


Sample Successful (200 OK) Response:

201 Created
(You are ready to proceed to Step 3)
3. getSellLimits
Endpoint:

GET {{HostName}}/inv/async/v1/externalSystems/{{ExtSystemCode}}/hotels/{{HotelId}}/sellLimits/{{RequestId2}}


Sample Successful Response:

200 OK
<The Sell Limits are posted to OPERA Cloud
>