openapi: 3.2.0 info: title: OPERA Cloud Front Desk Operations Outbound Front Office External API description: APIs to cater for Front Desk related external (outbound) functionality with OPERA Cloud. These APIs facilitate various operations related to getting data from an external system, and inserting it into OPERA Cloud.

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 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 servers: - url: /fof/v1 tags: - name: FrontOfficeExternal description: The FrontOffice External module provides operations for OPERA Cloud to access FrontOffice operations from external interfaces. paths: /hotels/{hotelId}/externalRoomKeys: post: summary: Requests room key(s) description: "API that manages requests for Door Lock Room Keys. This operation is used by OPERA Cloud connected to external Door Lock Systems systems via Outbound Systems configuration: \n\nOPERA Cloud utilizes this operation \n\n- to request new or additional room keys - e.g. when guest checks in, or additional keys post check in.\n\n- to request to activate new keys after check on e.g. when a room key has been lost for a room.\n\n- to request a room key which is not related to a guest reservation but valid for a defined time - (for show rooms, repair) - One Shot Key.\n\n- to request to re-encode a key whereby other keys for this room remain active.\n\n- to request to read a key data from a room key and display it to the user in the PMS.\n\n- to request to modify existing key data - upon room move or change of departure date. (online key systems only!!)\n\n- to request to remove / delete a room key from a room on. Usually sent with check out of a reservation.\n\nUse this API to post a room key action to the active Door Lock System.\n\nNotes on keyType values:\n\nkeyType = New\n\nkeyType = Lost \n\nIt is expected that all previous active keys for the room will become invalid.\n\nIt is expected that partner system handles multiple keys being active in case numberOfKeys is >1.\n\nkeyType = Duplicate\n\nkeyType = ReEncode\n\nIt is expected that existing active keys for this room remain active.\n\nkeyType = OneShot\n\nIt is expected that the room key is only valid for a room for specific time (for maintenance or Show room).\n\nIt is never related to a reservation.\n\nkeyType = Read A request to the Key Card system to read Key Card information from requested Key Encoder/reader.\n\nThe Key Read functionality is of pure informational purpose. None of the received information is stored or processed in the PMS, and it is only for display to the user.\n\nkeyType = Remove\n\nIt is expected that with this request all active keys for a room or reservation will become inactive or invalid so they will not be able to open the room after defined validityEnd time.\n\nAdditional KeyType actions used by Online Door Lock Systems:\n\nOnline Key card Systems are systems which do not write guest data to the room key directly but do store guest data internally and send the information to the related door lock.\n\nkeyType = ModifyStay\n\nFor Online Door Lock Systems - Request to adjust Room key data when guest changes length of stay (validityEnd)\n\nkeyType = RoomMove\n\nFor Online Door Lock Systems - adjust Room key data when guest performs room move. \n\n

OperationId: postExternalRoomKeys

" operationId: postExternalRoomKeys deprecated: true parameters: - name: hotelId in: path required: true description: Unique ID of the hotel schema: type: string maxLength: 2000 minLength: 1 - $ref: '#/components/parameters/authKey' - $ref: '#/components/parameters/externalData' - $ref: '#/components/parameters/x-app-key' - $ref: '#/components/parameters/x-request-id' - $ref: '#/components/parameters/x-originating-application' responses: '201': headers: Content-Language: description: Audience language x-example: en-GB schema: type: string pattern: '[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*' description: 'Response from the active Door Locking System Property Interface to the post request.

Note on Response messages: It is necessary to specify both the PMS ''encoderTerminal'' and the Key Service system''s coder (encoderId) in cases where more than one PMS workstation may be addressing one key coder. ORACLE PMS will NOT send another Request command automatically should a negative response be received. The user sees the response and decides if another try should be made.

' content: application/json;charset=UTF-8: schema: $ref: '#/components/schemas/roomKeyExternalDetails' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '405': $ref: '#/components/responses/405' '406': $ref: '#/components/responses/406' '413': $ref: '#/components/responses/413' '414': $ref: '#/components/responses/414' '415': $ref: '#/components/responses/415' '500': $ref: '#/components/responses/500' '502': $ref: '#/components/responses/502' '503': $ref: '#/components/responses/503' tags: - FrontOfficeExternal requestBody: content: application/json;charset=UTF-8: schema: allOf: - $ref: '#/components/schemas/roomKeyExternal' description: Request for generation of room key. required: true /hotels/{hotelId}/roomKeysOutbound: post: summary: Requests room key(s) description: "API that manages requests for Door Lock Room Keys. This operation is used by OPERA Cloud connected to external Door Lock Systems systems via Outbound Systems configuration: \n\nOPERA Cloud utilizes this operation \n\n- to request new or additional room keys - e.g. when guest checks in, or additional keys post check in.\n\n- to request to activate new keys after check on e.g. when a room key has been lost for a room.\n\n- to request a room key which is not related to a guest reservation but valid for a defined time - (for show rooms, repair) - One Shot Key.\n\n- to request to re-encode a key whereby other keys for this room remain active.\n\n- to request to read a key data from a room key and display it to the user in the PMS.\n\n- to request to modify existing key data - upon room move or change of departure date. (online key systems only!!)\n\n- to request to remove / delete a room key from a room on. Usually sent with check out of a reservation.\n\nUse this API to post a room key action to the active Door Lock System.\n\nNotes on keyType values:\n\nkeyType = New\n\nkeyType = Lost \n\nIt is expected that all previous active keys for the room will become invalid.\n\nIt is expected that partner system handles multiple keys being active in case numberOfKeys is >1.\n\nkeyType = Duplicate\n\nkeyType = ReEncode\n\nIt is expected that existing active keys for this room remain active.\n\nkeyType = OneShot\n\nIt is expected that the room key is only valid for a room for specific time (for maintenance or Show room).\n\nIt is never related to a reservation.\n\nkeyType = Read A request to the Key Card system to read Key Card information from requested Key Encoder/reader.\n\nThe Key Read functionality is of pure informational purpose. None of the received information is stored or processed in the PMS, and it is only for display to the user.\n\nkeyType = Remove\n\nIt is expected that with this request all active keys for a room or reservation will become inactive or invalid so they will not be able to open the room after defined validityEnd time.\n\nAdditional KeyType actions used by Online Door Lock Systems:\n\nOnline Key card Systems are systems which do not write guest data to the room key directly but do store guest data internally and send the information to the related door lock.\n\nkeyType = ModifyStay\n\nFor Online Door Lock Systems - Request to adjust Room key data when guest changes length of stay (validityEnd)\n\nkeyType = RoomMove\n\nFor Online Door Lock Systems - adjust Room key data when guest performs room move. \n\n

OperationId: postRoomKeysOutbound

" operationId: postRoomKeysOutbound parameters: - name: hotelId in: path required: true description: Unique ID of the hotel schema: type: string maxLength: 2000 minLength: 1 - $ref: '#/components/parameters/authKey' - $ref: '#/components/parameters/externalData' - $ref: '#/components/parameters/x-app-key' - $ref: '#/components/parameters/x-request-id' - $ref: '#/components/parameters/x-originating-application' responses: '201': headers: Content-Language: description: Audience language x-example: en-GB schema: type: string pattern: '[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*' description: 'Response from the active Door Locking System Property Interface to the post request.

Note on Response messages: It is necessary to specify both the PMS ''encoderTerminal'' and the Key Service system''s coder (encoderId) in cases where more than one PMS workstation may be addressing one key coder. ORACLE PMS will NOT send another Request command automatically should a negative response be received. The user sees the response and decides if another try should be made.

' content: application/json;charset=UTF-8: schema: $ref: '#/components/schemas/roomKeysOutboundDetails' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '405': $ref: '#/components/responses/405' '406': $ref: '#/components/responses/406' '413': $ref: '#/components/responses/413' '414': $ref: '#/components/responses/414' '415': $ref: '#/components/responses/415' '500': $ref: '#/components/responses/500' '502': $ref: '#/components/responses/502' '503': $ref: '#/components/responses/503' tags: - FrontOfficeExternal requestBody: content: application/json;charset=UTF-8: schema: allOf: - $ref: '#/components/schemas/roomKeysOutbound' description: Request for generation of room key. required: true components: responses: '406': description: Not acceptable. '414': description: Request URI Too Large '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/exceptionDetailType' '403': description: Forbidden '413': description: Request Entity Too Large '415': description: Unsupported Media Type '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/exceptionDetailType' '502': description: Bad Gateway '500': description: System Error content: application/json: schema: $ref: '#/components/schemas/exceptionDetailType' '503': description: Service Unavailable '401': description: Unauthorized '405': description: Method not allowed schemas: printDataType: type: object description: Lists the text, file or picture to print onto a Guest room key (only for roomKeyType is HardKey). properties: printText: description: key options code. type: string minLength: 0 maxLength: 200 printFile: description: Base64 format of file representing data to print. type: string format: byte printPicture: description: Base64 format of picture representing data to print. type: string format: byte keyOptionsResponseType: type: object description: This contains code and description information for key options. properties: keyOptionsCode: description: key options code. type: string minLength: 0 maxLength: 40 keyOptionDescription: description: key options description. type: string minLength: 0 maxLength: 40 isEnabled: description: Indicates that the keyOption is enabled for this key. type: boolean default: description: Indicates that this keyOption is a default access. type: boolean 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 errorInstance: title: Error Instance Details description: Complex type that contains error instance details for a REST call. type: object properties: type: type: string description: Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem (for example, using HTML). 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. detail: type: string description: Human-readable description specific to this occurrence of the problem. instance: type: string description: Absolute URI that identifies the specific occurrence of the problem. It may or may not provide additional information if dereferenced. o:errorCode: type: string description: Application error code, which is different from HTTP error code. o:errorPath: type: string description: Path to the problem at the resource or property level. roomKeysOutboundDetails: type: object description: Response for the key request made to DLS from OPERA Cloud. properties: encoderId: type: string description: Unique Id as defined by Door Lock System. maxLength: 2000 encoderTerminal: type: string description: The Unique PMS encoder name linked with the encoderId minLength: 1 maxLength: 2000 reservationIdList: description: Collection of unique reservation identifiers for the reservation we are trying to make a room key for. $ref: '#/components/schemas/uniqueIDListType' roomId: description: The PMS room number to generate a key for. type: string maxLength: 2000 keyTrack: description: KeyTrack Data. type: array items: $ref: '#/components/schemas/keyTrackType' keyValidityStart: type: string description: 'Date/Time Key is valid from - only send in response for keyType: ''Read'' request. Uses the hotel''s time zone.' format: date-time keyValidityEnd: type: string description: 'Date/Time Key is valid to - only send in response for keyType: ''Read'' request. Uses the hotel''s time zone.' format: date-time noOfKeys: type: integer description: Number of keys to be created.The value is always 1 responseText: type: string description: A user-friendly text with information on why a request is not successful maxLength: 2000 responseCode: $ref: '#/components/schemas/roomKeyResponseCodeType' additionalRooms: description: Collection of additional rooms to be included in key creation of reservation room. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 keyOptions: description: Lists all PMS access areas. type: array maxItems: 1000 items: $ref: '#/components/schemas/keyOptionsResponseType' userId: type: string description: Unique identifier for the PMS user. maxLength: 2000 digitalKeyData: description: 'Base64 format of Mobile Key data provided by DLS System which the external system requested - only send in response for roomKeyType: ''MobileKey''' type: string format: byte keyImage: description: 'Image of the created key - only send in response for roomKeyType: ''KeyPayload''' type: string format: byte cardSerialNumber: description: 'Unique identifier of RFID card used for KeyPayload generation - only send in response for roomKeyType: ''KeyPayload''.' type: string maxLength: 80 keyCreationTime: type: string description: Date/Time the key has been generated by Door Locking system. Uses the hotel's time zone. format: date-time roomKeyType: $ref: '#/components/schemas/externalRoomKeyType' keyUserType: $ref: '#/components/schemas/keyUserType' required: - roomId - responseCode - encoderTerminal - roomKeyType - keyUserType - keyValidityStart - keyValidityEnd - keyCreationTime exceptionDetailType: title: Error Detail description: Complex type that contains error details for a REST call. type: object properties: type: type: string description: Absolute URI [RFC3986] that identifies the problem type. When dereferenced, it SHOULD provide a human-readable summary of the problem (for example, using HTML). 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. detail: type: string description: Human-readable description specific to this occurrence of the problem. instance: type: string description: Absolute URI that identifies the specific occurrence of the problem. It may or may not provide additional information if dereferenced. o:errorCode: type: string description: Application error code, which is different from HTTP error code. o:errorPath: type: string description: Path to the problem at the resource or property level. o:errorDetails: description: Details of the error message, consisting of a hierarchical tree structure. type: array items: $ref: '#/components/schemas/errorInstance' links: $ref: '#/components/schemas/links' keyOptionsType: type: object description: This contains code and description information for key options. properties: keyOptionsCode: description: key options code. type: string minLength: 0 maxLength: 40 keyOptionDescription: description: key options description. type: string minLength: 0 maxLength: 40 roomKeyExternal: type: object description: Request for generation of room key used for OutBound. properties: encoderId: type: string description: Unique Id as defined by Door Lock System. minLength: 1 maxLength: 2000 encoderTerminal: type: string description: The Unique PMS encoder name linked with the encoderId minLength: 1 maxLength: 2000 roomId: description: The PMS room number to generate a key for. type: string maxLength: 2000 oldRoomId: description: Old Room Number is used when a room move (keyType RoomMove) is performed. type: string maxLength: 2000 noOfKeys: type: integer description: Number of keys to be created.The value is always 1 minimum: 1 maximum: 1 default: 1 reservationIdList: description: Collection of unique reservation identifiers for the reservation we are trying to make a room key for. $ref: '#/components/schemas/uniqueIDListType' guestShareFlag: type: boolean description: Indicates if Guest is a sharer or not OldGuestShareFlag: type: boolean description: Indicates if old Guest room is a sharer or not when a room move (keyType RoomMove) is performed. keyOptions: type: string maxLength: 2000 description: Lists the access areas defined in PMS valid for the room key. keyValidityStart: type: string description: The date/time the room key is valid from. format: date-time keyValidityEnd: type: string description: The date/time the room key is valid to. format: date-time keyType: $ref: '#/components/schemas/roomKeyOutBoundType' keyTrack: description: KeyTrack Data. $ref: '#/components/schemas/keyTrackType' additionalRooms: description: Collection of additional rooms to be included in key creation of reservation room. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 oldAdditionalRooms: description: Collection of old additional rooms in key creation of reservation room when a room move (keyType RoomMove) is performed. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 userId: type: string description: Unique identifier for the PMS user. maxLength: 2000 requestType: $ref: '#/components/schemas/requestType' required: - keyType - encoderTerminal - encoderId keyUserType: type: string description: Simple type for representing key user type. 'Guest' = request Opera Guest room key enum: - Guest roomKeyExternalDetails: type: object description: Response for the key request made to DLS from OPERA Cloud. properties: encoderId: type: string description: Unique Id as defined by Door Lock System. maxLength: 2000 encoderTerminal: type: string description: The Unique PMS encoder name linked with the encoderId minLength: 1 maxLength: 2000 reservationIdList: description: Collection of unique reservation identifiers for the reservation we are trying to make a room key for. $ref: '#/components/schemas/uniqueIDListType' roomId: description: The PMS room number to generate a key for. type: string maxLength: 2000 keyTrack: description: KeyTrack Data. type: array items: $ref: '#/components/schemas/keyTrackType' keyOptions: type: string maxLength: 200 description: 'Lists all PMS access areas - only send in response for keyType: ''Read'' request' keyValidityStart: type: string description: 'Date/Time Key is valid from - only send in response for keyType: ''Read'' request' format: date-time keyValidityEnd: type: string description: 'Date/Time Key is valid to - only send in response for keyType: ''Read'' request' format: date-time responseText: type: string description: A user-friendly text with information on why a request is not successful maxLength: 2000 responseCode: $ref: '#/components/schemas/roomKeyResponseCodeType' additionalRooms: description: Collection of additional rooms to be included in key creation of reservation room. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 required: - roomId - responseCode - encoderTerminal keyTrackType: type: object properties: keyTrack1: type: string minLength: 0 maxLength: 80 description: specific data if configured keyTrack2: type: string minLength: 0 maxLength: 2000 description: Track2 data string sent by PMS if defined or string (e.g. RFID ID) sent by DLS system in response keyTrack3: type: string minLength: 0 maxLength: 2000 description: Includes the Key Pincode or a digital key string for use (in 201 response only) uniqueIDListType: type: array description: Unique Id that references an object uniquely in the system. maxItems: 4000 items: $ref: '#/components/schemas/uniqueID_Type' roomKeyResponseCodeType: type: string description: 'Response Codes supported: OK - Successful; BY - Encoder Busy; UR - Unprocessable Request; RY - Retry' enum: - OK - BY - UR - RY externalRoomKeyType: type: string description: Simple type for representing room key request type. 'HardKey' = request for physical key card with RFID; 'MobileKey' = request for mobile key (no physical key); 'PinCode' = request for PinCode; 'KeyPayload' = request Key image from DLS System enum: - HardKey - MobileKey - PinCode - KeyPayload links: type: array items: $ref: '#/components/schemas/instanceLink' uniqueID_Type: type: object description: An identifier used to uniquely reference an object in a system (e.g. an airline reservation reference, customer profile reference, booking confirmation number, or a reference to a previous availability quote). properties: id: description: A unique identifying value assigned by the creating system. The ID attribute may be used to reference a primary-key value within a database or in a particular implementation. type: string minLength: 0 maxLength: 80 type: description: A reference to the type of object defined by the UniqueID element. type: string minLength: 0 maxLength: 40 roomKeyOutBoundType: type: string description: Simple type for representing room key type. enum: - New - Duplicate - Lost - OneShot - RoomMove - ReEncode - Remove - ModifyStay - Read requestType: type: string description: Simple type for representing request type. Request specific data in response message. 'R1' = request for regular room Key; 'R2' = request for UDID or Track2 of room key; 'R3' = request for PinCode; 'R4' = request for mobile key (no physical key) enum: - R1 - R2 - R3 - R4 roomKeysOutbound: type: object description: Request for generation of room key used for OutBound. properties: encoderId: type: string description: Unique Id as defined by Door Lock System. minLength: 1 maxLength: 2000 encoderTerminal: type: string description: The Unique PMS encoder name linked with the encoderId minLength: 1 maxLength: 2000 roomId: description: The PMS room number to generate a key for. type: string maxLength: 2000 oldRoomId: description: Old Room Number is used when a room move (keyType RoomMove) is performed. type: string maxLength: 2000 noOfKeys: type: integer description: Number of keys to be created. minimum: 1 maximum: 1 reservationIdList: description: Collection of unique reservation identifiers for the reservation we are trying to make a room key for. $ref: '#/components/schemas/uniqueIDListType' guestShareFlag: type: boolean description: Indicates if Guest is a sharer or not OldGuestShareFlag: type: boolean description: Indicates if old Guest room is a sharer or not when a room move (keyType RoomMove) is performed. keyValidityStart: type: string description: The date/time the room key is valid from. format: date-time keyValidityEnd: type: string description: The date/time the room key is valid to. format: date-time keyType: $ref: '#/components/schemas/roomKeyOutBoundType' keyTrack: description: KeyTrack Data. $ref: '#/components/schemas/keyTrackType' additionalRooms: description: Collection of additional rooms to be included in key creation of reservation room. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 oldAdditionalRooms: description: Collection of old additional rooms in key creation of reservation room when a room move (keyType RoomMove) is performed. type: array maxItems: 999 items: type: string minLength: 0 maxLength: 20 userId: type: string description: Unique identifier for the PMS user. maxLength: 2000 keyOptions: description: Lists the access areas defined in PMS valid for the room key. type: array maxItems: 1000 items: $ref: '#/components/schemas/keyOptionsType' keyRequestTime: type: string description: The date/time the room key is requested. format: date-time roomKeyType: $ref: '#/components/schemas/externalRoomKeyType' keyUserType: $ref: '#/components/schemas/keyUserType' cardSerialNumber: description: Unique identifier of RFID card used for KeyPayload generation. Required when roomKeyType is KeyPayload. type: string maxLength: 80 printData: description: Lists the text, file or picture to print onto a Guest room key (only for roomKeyType is HardKey). type: object $ref: '#/components/schemas/printDataType' required: - keyType - encoderTerminal - encoderId - roomKeyType - keyUserType - keyRequestTime parameters: x-app-key: name: x-app-key description: Client or Partner's Application Key in: header required: true schema: 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}$ authKey: name: authorization description: Bearer token that needs to be passed which is generated post user authentication in: header required: false schema: type: string externalData: name: externalData description: Pass this header as true, if payload needs DVM in: header schema: type: string x-originating-application: name: x-originating-application description: Customer's Integration Application Id in: header schema: type: string x-request-id: name: x-request-id description: Request Id of an incoming request in: header schema: type: string pattern: ~*[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12} externalDocs: description: Find out more about Oracle Hospitality url: https://docs.oracle.com/en/industries/hospitality/integration_platforms.html