OPERA Cloud Distribution Reservation Service

The OPERA Cloud Distribution Reservation API enables authorized channel partners to create, update, fetch and cancel reservations for properties managed through OPERA Cloud Foundation or OPERA Cloud Central, leveraging Oracle Hospitality Identity Management for secure access. Each request must include a valid channel code in the x-channelCode header. When a hotel maps its hotel, room type, and rate codes to channel-specific values, the API will return those mapped channel codes; otherwise, it will return the native OPERA Cloud codes. Compatible with OPERA Cloud release 26.2.0.0. 4 operation(s) documented; base path /distribution/v1. Harvested verbatim from Oracle's public hospitality-api-docs repository (Swagger 2.0, release 26.2.0.0).

OpenAPI Specification

oracle-hospitality-distribution-v1-distribution.json Raw ↑
{
  "swagger": "2.0",
  "info": {
    "version": "26.2.0.0",
    "title": "OPERA Cloud Distribution Reservation Service",
    "description": "The OPERA Cloud Distribution Reservation API enables authorized channel partners to create, update, fetch and cancel reservations for properties managed through OPERA Cloud Foundation or OPERA Cloud Central, leveraging Oracle Hospitality Identity Management for secure access. Each request must include a valid channel code in the x-channelCode header. When a hotel maps its hotel, room type, and rate codes to channel-specific values, the API will return those mapped channel codes; otherwise, it will return the native OPERA Cloud codes.<br /><br /> Compatible with OPERA Cloud release 26.2.0.0<br /><br /><p> 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.</p>",
    "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": "/distribution/v1",
  "schemes": [
    "https"
  ],
  "produces": [
    "application/json; charset=utf-8"
  ],
  "paths": {
    "/hotels/{hotelId}/reservations": {
      "post": {
        "summary": "Create Reservation",
        "description": "<p>This API allows the user to Create Reservations.</p> <p><strong>OperationId:</strong>postReservation</p>",
        "operationId": "postReservation",
        "tags": [
          "Reservation"
        ],
        "consumes": [
          "application/json; charset=utf-8"
        ],
        "parameters": [
          {
            "$ref": "#/parameters/hotelId"
          },
          {
            "in": "body",
            "name": "body",
            "schema": {
              "$ref": "#/definitions/createReservation"
            },
            "required": true
          },
          {
            "$ref": "#/parameters/authKey"
          },
          {
            "$ref": "#/parameters/x-app-key"
          },
          {
            "$ref": "#/parameters/Content-Type"
          },
          {
            "$ref": "#/parameters/x-request-id"
          },
          {
            "$ref": "#/parameters/x-originating-application"
          },
          {
            "$ref": "#/parameters/Accept-Language"
          },
          {
            "$ref": "#/parameters/channelCodeHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/createReservationResponse"
            },
            "headers": {
              "Content-Language": {
                "type": "string",
                "description": "Response language",
                "x-example": "en-US"
              },
              "Location": {
                "type": "string",
                "description": "Location of the newly created reservation"
              }
            }
          },
          "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 supported",
            "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/{hotelId}/reservations/{reservationId}": {
      "get": {
        "summary": "Get reservation.",
        "description": "<p>This API allows the user to fetch a particular reservation by confirmation Id, reservation Id or external reference Id</p> <p><strong>OperationId:</strong>getReservation</p>",
        "operationId": "getReservation",
        "tags": [
          "Reservation"
        ],
        "parameters": [
          {
            "name": "hotelId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "x-example": "XUSXXYY99",
            "description": "The unique identifier of the property within the channel system."
          },
          {
            "name": "reservationId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "x-example": "123456789",
            "description": "OPERA Cloud reservation Id or Confirmation Number or Channel External Reference Id which is used to find reservation from OPERA Cloud."
          },
          {
            "name": "includeInSession",
            "in": "query",
            "required": false,
            "type": "boolean",
            "default": false,
            "description": "<p>Flag indicating whether to fetch the in-session reservation.</p> <p>If true, the most recent state of the session reservation is returned.</p> <p>If false or not passed, the last committed state of the reservation is returned.</p>"
          },
          {
            "name": "fetchInstructions",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "AccompanyingGuestMembership",
                "AccompanyingGuestProfile",
                "AccompanyingGuestRelationship",
                "Alerts",
                "Attachments",
                "AutoCheckInRoomType",
                "CallHistory",
                "Comments",
                "ConfirmationLetters",
                "DailySummary",
                "ECertificates",
                "ECoupons",
                "FetchChildAges",
                "FixedCharges",
                "GuestComments",
                "GuestLastStay",
                "GuestMemberships",
                "GuestMessages",
                "Indicators",
                "InventoryItems",
                "Keys",
                "LinkedReservations",
                "Locators",
                "Memberships",
                "OffshoreRates",
                "Packages",
                "Preferences",
                "PrepaidCards",
                "ProfileAwards",
                "RateInfoDetails",
                "Reservation",
                "ReservationActivities",
                "ReservationAwards",
                "ReservationMembershipAwards",
                "ReservationPaymentMethods",
                "ReservationPolicies",
                "ReservationProtection",
                "RevenuesAndBalances",
                "RoomAssignedByAI",
                "RoutingInstructions",
                "ScheduledActivities",
                "ScheduledRoomMoves",
                "Shares",
                "Tickets",
                "TotalCostOfStay",
                "TotalDepositPaid",
                "Traces",
                "TrackItItems",
                "TransactionDiversions",
                "UpsellInfo",
                "Voucher",
                "WebRegistrationCards"
              ],
              "description": "Instructions on what data must be returned in the response. Can contain one or more items from the list above.\n"
            }
          },
          {
            "$ref": "#/parameters/Accept-Language"
          },
          {
            "$ref": "#/parameters/authKey"
          },
          {
            "$ref": "#/parameters/x-app-key"
          },
          {
            "$ref": "#/parameters/channelCodeHeader"
          },
          {
            "$ref": "#/parameters/x-originating-application"
          },
          {
            "$ref": "#/parameters/x-request-id"
          }
        ],
        "responses": {
          "200": {
            "description": "Reservation Fetched Successfully",
            "schema": {
              "$ref": "#/definitions/fetchReservationDetails"
            },
            "headers": {
              "Content-Language": {
                "type": "string",
                "description": "Response language",
                "x-example": "en-US"
              },
              "Location": {
                "type": "string",
                "description": "Location of the fetched reservation"
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          },
          "405": {
            "description": "Not supported",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          },
          "406": {
            "description": "Not acceptable",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/ExceptionDetail"
            }
          }
        }
      },
      "put": {
        "summary": "Update Reservation",
        "description": "Use this to update an existing reservation for a hotel, such as adding comments, changing the number of guests.   There are many fields in putReservation defined by ListOfValues; ensure you have reviewed ListOfValues APIs in order successfully to use putReservation. <p><strong>OperationId:</strong>putReservation</p>",
        "operationId": "putReservation",
        "parameters": [
          {
            "name": "reservationId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "A unique OPERA Cloud confirmation number or reservation ID is used to locate a reservation in OPERA Cloud. This ID serves as the primary identifier for a reservation in OPERA Cloud."
          },
          {
            "name": "hotelId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "x-example": "XUSXXYY99",
            "description": "The unique identifier of the property within the channel system."
          },
          {
            "name": "changeReservation",
            "in": "body",
            "required": true,
            "description": "Request method to change a reservations information.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/definitions/changeReservation"
                },
                {
                  "example": {
                    "reservations": [
                      {
                        "sourceOfSale": {
                          "sourceType": "PMS",
                          "sourceCode": "HOTEL1"
                        },
                        "roomStay": {
                          "roomRates": [
                            {
                              "total": {
                                "amountBeforeTax": "120"
                              },
                              "rates": {
                                "rate": [
                                  {
                                    "base": {
                                      "amountBeforeTax": "120",
                                      "currencyCode": "USD"
                                    },
                                    "shareDistributionInstruction": "Full",
                                    "total": {
                                      "amountBeforeTax": "120"
                                    },
                                    "start": "2021-02-27",
                                    "end": "2021-02-27"
                                  }
                                ]
                              },
                              "guestCounts": {
                                "adults": "1",
                                "children": "0"
                              },
                              "roomType": "STDK",
                              "ratePlanCode": "IHUBFAST",
                              "start": "2021-02-27",
                              "end": "2021-02-27",
                              "suppressRate": false,
                              "marketCode": "CORP",
                              "marketCodeDescription": "Group Corporate",
                              "sourceCode": "REF",
                              "sourceCodeDescription": "Referral",
                              "numberOfUnits": "1",
                              "pseudoRoom": false,
                              "roomTypeCharged": "STDK",
                              "houseUseOnly": false,
                              "complimentary": false,
                              "fixedRate": false,
                              "discountAllowed": false,
                              "bogoDiscount": false
                            }
                          ],
                          "guestCounts": {
                            "adults": "1",
                            "children": "0"
                          },
                          "arrivalDate": "2021-02-27",
                          "departureDate": "2021-02-28",
                          "guarantee": {
                            "guaranteeCode": "GDED",
                            "shortDescription": "Group Deduct"
                          },
                          "total": {
                            "amountBeforeTax": "120",
                            "amountAfterTax": "121"
                          },
                          "roomNumberLocked": false,
                          "printRate": false,
                          "remoteCheckInAllowed": false,
                          "bookingMedium": "PMS",
                          "bookingMediumDescription": "PMS Channel"
                        },
                        "reservationGuests": {
                          "reservationGuest": [
                            {
                              "profileInfo": {
                                "profileIdList": [
                                  {
                                    "id": "687128",
                                    "type": "Profile"
                                  }
                                ],
                                "profile": {
                                  "customer": {
                                    "personName": [
                                      {
                                        "givenName": "Sam",
                                        "surname": "Jones",
                                        "nameTitle": "Mr",
                                        "nameType": "Primary"
                                      },
                                      {
                                        "nameType": "External"
                                      }
                                    ],
                                    "language": "E",
                                    "vipStatus": "GOLD",
                                    "vipDescription": "Gold Level"
                                  },
                                  "profileType": "Guest"
                                }
                              },
                              "primary": true
                            }
                          ]
                        },
                        "comments": {
                          "commentInfo": [
                            {
                              "comment": {
                                "text": {
                                  "value": "The guest will be a late arrival"
                                },
                                "commentTitle": "InHouse Comment",
                                "notificationLocation": "PROPDFLT",
                                "type": "RESERVATION",
                                "internal": false
                              },
                              "id": "120303",
                              "type": "Comment"
                            },
                            {
                              "comment": {
                                "text": {
                                  "value": "reservation comments"
                                },
                                "commentTitle": "No Change To Reservation Comment",
                                "notificationLocation": "GEN",
                                "type": "RESERVATION",
                                "internal": false
                              },
                              "id": "120304",
                              "type": "Comment"
                            },
                            {
                              "comment": {
                                "text": {
                                  "value": "New Cashier Comment"
                                },
                                "commentTitle": "New Cashier Comment",
                                "notificationLocation": "Note1",
                                "type": "CASHIER",
                                "internal": false
                              }
                            }
                          ]
                        },
                        "hotelId": "HOTEL1",
                        "roomStayReservation": true,
                        "reservationStatus": "Reserved",
                        "computedReservationStatus": "DueIn",
                        "walkIn": false,
                        "printRate": false,
                        "createBusinessDate": "2021-02-27",
                        "preRegistered": false,
                        "upgradeEligible": false,
                        "allowAutoCheckin": false,
                        "hasOpenFolio": false,
                        "allowMobileCheckout": false,
                        "allowMobileViewFolio": false,
                        "allowPreRegistration": false,
                        "optedForCommunication": false,
                        "chargeCardNumber": "5904606"
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "$ref": "#/parameters/authKey"
          },
          {
            "$ref": "#/parameters/x-app-key"
          },
          {
            "$ref": "#/parameters/Content-Type"
          },
          {
            "$ref": "#/parameters/x-request-id"
          },
          {
            "$ref": "#/parameters/x-originating-application"
          },
          {
            "$ref": "#/parameters/Accept-Language"
          },
          {
            "$ref": "#/parameters/channelCodeHeader"
          }
        ],
        "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"
              },
              "Location": {
                "type": "string",
                "description": "Location of newly created resource"
              }
            },
            "description": "OK.",
            "schema": {
              "$ref": "#/definitions/changeReservationDetails"
            }
          },
          "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 supported",
            "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"
            }
          }
        },
        "consumes": [
          "application/json;charset=UTF-8"
        ],
        "produces": [
          "application/json;charset=UTF-8"
        ],
        "tags": [
          "Reservation"
        ]
      }
    },
    "/hotels/{hotelId}/reservations/{reservationId}/cancellations": {
      "post": {
        "summary": "Cancel Reservation",
        "description": "Use this if a guest would like to cancel their reservation.  You will receive a cancellation number in the response. <p><strong>OperationId:</strong>postCancelReservation</p>",
        "operationId": "postCancelReservation",
        "parameters": [
          {
            "name": "reservationId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "A unique OPERA Cloud confirmation number or reservation ID is used to locate a reservation in OPERA Cloud. This ID serves as the primary identifier for a reservation in OPERA Cloud."
          },
          {
            "name": "hotelId",
            "in": "path",
            "required": true,
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "x-example": "XUSXXYY99",
            "description": "The unique identifier of the property within the channel system."
          },
          {
            "name": "cancelReservation",
            "in": "body",
            "required": true,
            "description": "Request object for canceling reservations.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/definitions/cancelReservation"
                },
                {
                  "example": {
                    "reason": {
                      "description": "Bad weather has changed travel plans",
                      "code": "WEATHER"
                    },
                    "reservations": [
                      {
                        "reservationIdList": [
                          {
                            "id": "660082",
                            "type": "Reservation"
                          }
                        ],
                        "externalCancellationId": "123456",
                        "roomStatus": "Clean",
                        "allowedActions": [
                          "Cancel"
                        ],
                        "hotelId": "HOTEL1",
                        "cxlInstr": {
                          "deleteResTraces": true
                        }
                      }
                    ],
                    "verificationOnly": false
                  }
                }
              ]
            }
          },
          {
            "$ref": "#/parameters/authKey"
          },
          {
            "$ref": "#/parameters/x-app-key"
          },
          {
            "$ref": "#/parameters/Content-Type"
          },
          {
            "$ref": "#/parameters/x-request-id"
          },
          {
            "$ref": "#/parameters/x-originating-application"
          },
          {
            "$ref": "#/parameters/Accept-Language"
          },
          {
            "$ref": "#/parameters/channelCodeHeader"
          }
        ],
        "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 newly created resource"
              }
            },
            "description": "Response object for the request to cancel reservations. Response contains the reservations which were successfully canceled.",
            "schema": {
              "$ref": "#/definitions/cancelReservationDetails"
            }
          },
          "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 supported",
            "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"
            }
          }
        },
        "consumes": [
          "application/json;charset=UTF-8"
        ],
        "produces": [
          "application/json;charset=UTF-8"
        ],
        "tags": [
          "Reservation"
        ]
      }
    }
  },
  "definitions": {
    "ExceptionDetail": {
      "type": "object",
      "description": "Object that contains error details for a REST call.",
      "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.",
          "example": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.x"
        },
        "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": "OPERAWS-RSV00060: Reservation Id was not found"
        },
        "status": {
          "type": "integer",
          "description": "HTTP status code for this occurrence of the problem, set by the origin server.",
          "example": 400
        },
        "detail": {
          "type": "string",
          "description": "Human-readable description specific to this occurrence of the problem.",
          "example": "Reservation Id was not found"
        },
        "instance": {
          "type": "string",
          "description": "Absolute URI that identifies the specific occurrence of the problem. It may or may not provide additional information if dereferenced.",
          "example": "/uri/to/error"
        },
        "o.errorCode": {
          "type": "string",
          "description": "OPERA Cloud error code, which is different from HTTP error code.",
          "example": "OPERAWS-RSV00060"
        },
        "o.errorDetails": {
          "type": "array",
          "description": "Details of the error message, consisting of a hierarchical tree structure.",
          "items": {
            "$ref": "#/definitions/ExceptionDetail"
          }
        }
      },
      "required": [
        "title",
        "status",
        "detail"
      ]
    },
    "cancelReservation": {
      "type": "object",
      "description": "Request object for canceling reservations.",
      "properties": {
        "rateChangeInstruction": {
          "description": "Defines rate change instruction to use relevant for sharing reservations.",
          "$ref": "#/definitions/rateChangeInstructionType"
        },
        "reason": {
          "description": "Specifies the reason for the cancellation.",
          "$ref": "#/definitions/cancellationReasonType"
        },
        "reservations": {
          "description": "Information on the reservation that is to be canceled.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/cancelReservationType"
          }
        },
        "channelInformation": {
          "description": "Channel specific information to be received in case the reservation is being c

# --- truncated at 32 KB (543 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/oracle-hospitality/refs/heads/main/openapi/oracle-hospitality-distribution-v1-distribution.json