4 Configurations

Before calling Property APIs, you must complete the following tasks:

To connect with the Door Lock System, the below configurations must be completed in the OPERA Cloud UI:
  • In OPERA Cloud, configure an Outbound system interface for Outbound Type "GUESTKEY_GENERIC" per OPERA Cloud Property. See Configuring Outbound Systems to learn more.

  • In OPERA Cloud, configure the required outbound domain/host entry to allow an HTTPS connection from OPERA Cloud to the partner system. See Configuring Outbound Domain Allow Listings to learn more.

  • In OPERA Cloud, configure a Property Interface for IFC TYPE DLS linked to the Outbound Door Lock Interface per OPERA Cloud Property. See Configuring Property Interface to learn more.

  • In the OPERA Cloud Property Interface, the supported room key action types must be configured (that is, New key, Duplicate key, One-shot key, Read key, and Delete key) to display them in the OPERA Cloud "Create Key" screen. See Configuring Property Interface Rights to learn more.

  • In OPERA Cloud, configure the Door Lock system as either an ONLINE KEY System or OFFLINE System, or configure it as a system providing PIN Codes instead of "hard keys." The related PMS Functionality will then be enabled. See Configuring Property Interface General Information to learn more.

  • In OPERA Cloud, configure additional optional access area codes (KeyOptions) that can be chosen by the user upon create Key request. See Preference Groups to learn more.

Mandatory Data the Door Lock System Must Retrieve to Properly Handle Room Keys

To properly perform the roomKeysExternal operation in OHIP, the external system must know the unique HotelId of the customer's OPERA Cloud property.

  • HotelId - The Property Code that identifies the specific hotel. This code is part of the URL path and is sent with every API message.
  • PMS RoomId - The configured room numbers of the hotel. The roomId identifies the door lock for which the room key is requested.

How to Retrieve the HotelId and Configured Room Numbers

  • The customer can hand out the hotelIds and configured room numbers to be used with the DLS integration.
  • The customer can alternatively retrieve the hotelIds and also the configured room numbers through OHIP operations.

Retrieve a List of all HotelIds for a Chain

Use the OperationId getResortChains (Postman Example).

Use this API to retrieve HotelId information for a selected Chain.

At least ONE HotelId (the Hotel's OPERA Cloud Property Code) must be obtained directly from the customer as this must be used with the API call.

Sample: getResortChains

GET HostName /lov/v1/listOfValues/ResortChains

Table 4-1 getResortChains

Response
{
    "listOfValues": {
        "items": [
            {
                "flexfields": [
                    {
                        "parameterName": "ChainCode",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainName",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainDesc",
                        "parameterValue": "OHIPSB"
                    }
                ],
                "code": "SAND01",
                "name": "OHIP Sandbox 1",
                "description": "OHIP Sandbox 1",
                "active": true
            },
            {
                "flexfields": [
                    {
                        "parameterName": "ChainCode",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainName",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainDesc",
                        "parameterValue": "OHIPSB"
                    }
                ],
                "code": "SAND02",
                "name": "OHIP Sandbox 2",
                "description": "OHIP Sandbox 2",
                "active": true
            },
            {
                "flexfields": [
                    {
                        "parameterName": "ChainCode",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainName",
                        "parameterValue": "OHIPSB"
                    },
                    {
                        "parameterName": "ChainDesc",
                        "parameterValue": "OHIPSB"
                    }
                ],
                "code": "SAND03",
                "name": "OHIP Sandbox 3",
                "description": "OHIP Sandbox 3",
                "active": true
            }
        ],
        "lovName": "ResortChains",
        "itemCount": 3
    }
}

Retrieve a simple list of room numbers for the resort (HotelId)

Retrieve the configured room numbers of a specific property that you need to send in the postRoomKeysExternal requests.

Use the OperationId getResortRoomNumbers (Postman Example)

Use this API to fetch room numbers and simple information for a selected HotelId. The response includes a list of all configured rooms at a property.

Note:

Room numbers can have leading zeroes (for example, "010", "0101", "0002"). As there is no translation of room numbers, the external system (and the Door Lock System) should support room numbers with leading zeroes.

Sample: getResortRoomNumbers

GET HostName /lov/v1/listOfValues/hotels/HotelId/resortRoomNumbers

Table 4-2 getResortRoomNumbers

Response
{
    "listOfValues": {
        "items": [
            {
                "flexfields": [
                    {
                        "parameterName": "Label",
                        "parameterValue": "JSUI"
                    },
                    {
                        "parameterName": "ShortDescription",
                        "parameterValue": "Junior Suite"
                    }
                ],
                "code": "1000",
                "name": "2 Double Beds and 1 Simple Bed",
                "description": "2 Double Beds and 1 Simple Bed",
                "active": true
            },
            {
                "flexfields": [
                    {
                        "parameterName": "Label",
                        "parameterValue": "JSUI"
                    },
                    {
                        "parameterName": "ShortDescription",
                        "parameterValue": "Junior Suite"
                    }
                ],
                "code": "1001",
                "name": "2 Double Beds and 1 Simple Bed",
                "description": "2 Double Beds and 1 Simple Bed",
                "active": true
            },
            {
                "flexfields": [
                    {
                        "parameterName": "Label",
                        "parameterValue": "JSUI"
                    },
                    {
                        "parameterName": "ShortDescription",
                        "parameterValue": "Junior Suite"
                    }
                ],
                "code": "1002",
                "name": "2 Double Beds and 1 Simple Bed",
                "description": "2 Double Beds and 1 Simple Bed",
                "active": true
            },

Retrieve a detailed list of physical and/or pseudo rooms for a property

Pseudo Rooms can be defined as Conference rooms in OPERA Cloud. Related door lock IDs are defined in the Door Lock System and can be linked to the Pseudo Rooms in OPERA Cloud Configuration.

Note:

Room numbers can have leading zeroes (for example, "010", "0101", "0002"). As there is no translation of room numbers, the external system (and the Door Lock System) should support room numbers with leading zeroes.

Use the OperationId getRooms (Postman Example).

Use this API to fetch detailed information of rooms that exist for a specified property. The response includes a list of all existing physical and or pseudo rooms at that property.

Sample: getRooms

GET HostName /rm/config/v1/hotels/ hotelId /rooms?limit=&offset=&physical=&pseudo=&roomClassCodes=&roomTypeCode=

The below table lists useful query parameters for the operation.

Table 4-3 Query Parameters

Parameter Type Description
  • hotelId

String

The unique ID of hotel.

  • limit

Number (max 20)

Indicates the maximum number of records a web service should return.

  • offset

Number

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 is returned.

  • physical

Boolean (true/false)

Is it a physical room type.

  • pseudo

Is it a pseudo room type.

Boolean (true/false)

  • roomClassCodes

Array

 
  • roomTypeCodes

Array

 
  • room

String

The room to be searched.

Table 4-4 API Message Sample: Response Listing All Rooms

Response Listing All Rooms
{
    "rooms": [
        {
            "room": [

                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "STD",
                        "houseKeeping": true,
                        "minimumOccupancy": 1,
                        "maximumOccupancy": 1,
                        "accessible": false,
                        "roomType": "ECO",
                        "meetingRoom": false
                    },
                    "roomFeatures": [
                        {
                            "code": "QBED",
                            "description": "Queen Bed",
                            "orderSequence": 1
                        },
                        {
                            "code": "NEAR",
                            "description": "Near elevator",
                            "orderSequence": 11
                        },
                        {
                            "code": "PET",
                            "description": "Pet room",
                            "orderSequence": 15
                        }
                    ],
                    "roomDescription": "Economy Room",
                    "description": {
                        "defaultText": "Economy Room",
                        "translatedTexts": []
                    },
                    "accessible": true,
                    "roomId": "101",
                    "meetingRoom": true,
                    "roomComponents": [],
                    "connectingRooms": [
                        {
                            "roomType": {
                                "roomType": "ECO"
                            },
                            "description": {
                                "defaultText": "Economy Room"
                            },
                            "roomId": "102"
                        }
                    ],
                    "rateAmount": {},
                    "maximumOccupancy": 1,
                    "sellSequence": 1,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "STD",
                        "houseKeeping": true,
                        "minimumOccupancy": 1,
                        "maximumOccupancy": 1,
                        "accessible": false,
                        "roomType": "ECO",
                        "meetingRoom": false
                    },
                    "roomDescription": "Economy Room",
                    "description": {
                        "defaultText": "Economy Room",
                        "translatedTexts": []
                    },
                    "accessible": true,
                    "roomId": "102",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "connectingRooms": [
                        {
                            "roomType": {
                                "roomType": "ECO"
                            },
                            "description": {
                                "defaultText": "Economy Room"
                            },
                            "roomId": "101"
                        }
                    ],
                    "rateAmount": {},
                    "maximumOccupancy": 1,
                    "sellSequence": 1,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },

                {
                    "roomType": {
                        "pseudo": true,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": false,
                        "maximumOccupancy": 1,
                        "accessible": false,
                        "roomType": "PM",
                        "meetingRoom": false
                    },
                    "roomDescription": "Posting Master",
                    "description": {
                        "defaultText": "PM IFC other 15",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "9015",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 1,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": true,
                        "suite": false,
                        "roomClass": "PSE",
                        "houseKeeping": false,
                        "accessible": false,
                        "roomType": "DPDP",
                        "meetingRoom": false
                    },
                    "roomDescription": "DP",
                    "description": {
                        "defaultText": "DP",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "9200",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": true,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": false,
                        "building": "1",
                        "maximumOccupancy": 300,
                        "accessible": false,
                        "roomType": "BALLROOM",
                        "meetingRoom": true
                    },
                    "roomDescription": "Grand Ballroom",
                    "description": {
                        "defaultText": "West Sunset Room 1",
                        "translatedTexts": []
                    },
                    "building": "1",
                    "accessible": true,
                    "roomId": "BALLROOM",
                    "meetingRoom": true,
                    "roomComponents": [],
                    "rateAmount": {},
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                }
            ],
            "hotelId": "SAND01"
        }

Table 4-5 API Message Sample: Example Guest Room

Example Guest Room
{
                    "roomType": {
                        "pseudo": false,
                        "suite": false,
                        "roomClass": "STD",
                        "houseKeeping": true,
                        "minimumOccupancy": 1,
                        "maximumOccupancy": 1,
                        "accessible": false,
                        "roomType": "ECO",
                        "meetingRoom": false
                    },
                    "roomFeatures": [
                        {
                            "code": "QBED",
                            "description": "Queen Bed",
                            "orderSequence": 1
                        },
                        {
                            "code": "NEAR",
                            "description": "Near elevator",
                            "orderSequence": 11
                        },
                        {
                            "code": "PET",
                            "description": "Pet room",
                            "orderSequence": 15
                        }
                    ],
                    "roomDescription": "Economy Room",
                    "description": {
                        "defaultText": "Economy Room",
                        "translatedTexts": []
                    },
                    "accessible": true,
                    "roomId": "101",
                    "meetingRoom": true,
                    "roomComponents": [],
                    "connectingRooms": [
                        {
                            "roomType": {
                                "roomType": "ECO"
                            },
                            "description": {
                                "defaultText": "Economy Room"
                            },
                            "roomId": "102"
                        }
                    ],
                    "rateAmount": {},
                    "maximumOccupancy": 1,
                    "sellSequence": 1,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },

Table 4-6 API Message Sample: Example Post Master (Room Type PM)

Example Post Master (Room Type PM)
{
                    "roomType": {
                        "pseudo": true,
                        "suite": false,
                        "roomClass": "ALL",
                        "houseKeeping": false,
                        "maximumOccupancy": 1,
                        "accessible": false,
                        "roomType": "PM",
                        "meetingRoom": false
                    },
                    "roomDescription": "Posting Master",
                    "description": {
                        "defaultText": "PM IFC other 15",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "9015",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "maximumOccupancy": 1,
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },
                {
                    "roomType": {
                        "pseudo": true,
                        "suite": false,
                        "roomClass": "PSE",
                        "houseKeeping": false,
                        "accessible": false,
                        "roomType": "DPDP",
                        "meetingRoom": false
                    },
                    "roomDescription": "DP",
                    "description": {
                        "defaultText": "DP",
                        "translatedTexts": []
                    },
                    "accessible": false,
                    "roomId": "9200",
                    "meetingRoom": false,
                    "roomComponents": [],
                    "rateAmount": {},
                    "ownerRoom": false,
                    "keyOptions": [],
                    "turndownService": false,
                    "roomSection": {}
                },

Note:

  • There must be one postRoomKeysExternal call sent per key.
  • If multiple keys are requested, the first key must be requested as keyType: "New."
  • All the following keys must be requested as keyType "Duplicate" AFTER receiving the response for the first requested key.
  • The "numberOfKeys" value is always "1" and must not be changed.