Opera (Oracle) logo

Opera (Oracle Hospitality) Integration

Connects via OAuth 2.0 with an additional application key header. Focuses on availability, room types, and rate catalogue queries. Reservation creation is not yet supported. Opera (Oracle) official site ↗

Supported features

FeatureSupportedNotes
Hotel availabilityIncludes rate plan and room type info
Room types
Rate plansUses check-in date as sell date
Rate categories
Room ratesPricing exposed through availability and rate plans
Create reservation
List / get reservations
Payment link

Setup steps

  1. Request API credentials from Oracle Hospitality

    Contact your Oracle Hospitality account manager to request partner API access for Opera Cloud. You will receive:

    • clientId — OAuth application client ID
    • clientSecret — OAuth application client secret
    • xAppKey — application key sent as the x-app-key header on every request
    • enterpriseId — your enterprise scope identifier (optional but required for some endpoints)
    The xAppKey is different from the OAuth credentials. It must be sent on both the token request and every subsequent API call. Missing it causes 401 errors even with a valid access token.
  2. Find your hotel ID

    The hotel ID is the Opera Hotel Code (typically a short uppercase string like GRAND). It appears in Opera Cloud under Administration → Enterprise → Hotels. You need this for the hotelConfig array.

  3. Enter the credentials in the business console

    Open the business console, select your client, and go to PMS Integration. Choose Opera and fill in:

    • xAppKey — application key from step 1
    • clientId and clientSecret — OAuth credentials from step 1
    • enterpriseId — enterprise scope from step 1 (leave blank if not provided)
    • hotelConfig — hotel code and display name from step 2
  4. Enable the integration

    Toggle Active to on and save. OAuth tokens are fetched on first use and refreshed automatically. The hotel ID is sent as the x-hotelid header on every Opera API request — no additional configuration needed.

Available tools

4 tools are available for Opera (Oracle). The concierge calls them on a guest's behalf during a conversation; which are enabled is set per property, so you only turn on what you want it to be able to do.

Enabled by default (4)

Every certified tool is on as soon as the integration is connected.

ToolWhat it does
opera_get_availabilityCheck room availability and rates at the hotel for a stay window. Use this when a guest asks 'do you have rooms for...', 'what's available from... to...', or any availability or price question for specific dates. roomStayStartDate = check-in date, roomStayEndDate = check-out date, both in ISO YYYY-MM-DD format (e.g. 2026-09-01). Returns room stays with room types, rate plans, and room rates. An empty response means nothing is available for those dates — not an error.
opera_get_rate_categoriesRetrieve the hotel's rate categories (codes and names) from the Opera list-of-values service. Use this to discover which rate categories exist before filtering the rate plans or availability tools by rateCategory. Takes no parameters.
opera_get_rate_plansRetrieve the hotel's rate plans with rate information for a given sell date. Use this to answer questions about rate plan names, pricing structure, or which rates apply to a stay. sellDate is REQUIRED — use the guest's check-in date (Opera prices rate plans as of the date the stay would be sold). ISO YYYY-MM-DD format. Optionally filter by rateCategory, and page with offset/limit when the hotel has many rate plans.
opera_get_room_typesRetrieve the hotel's room type catalog (codes, names, descriptions) from the Opera list-of-values service. Use this to answer 'what types of rooms do you have?' or to describe and compare room options — for what can be booked on specific dates use the availability tool instead. Takes no parameters; only active room types are returned.

Not yet certified (6)

Built and working against the Opera (Oracle) API, but Maison is not yet certified with Opera (Oracle) to use them in production, so they cannot be enabled today. Listed so you can see what is coming rather than discover the gap when you ask for it.

ToolWhat it does
opera_cancel_reservationCancel an existing reservation. Returns a cancellation number the guest should keep. reservationId is the OPERA-internal reservation id (from search results, not the confirmation number). The reservations body array must repeat that SAME id: pass exactly one entry of the form {"reservationIdList":[{"id":"<reservationId>","type":"Reservation"}],"hotelId":"<hotelId from the reservation read>"}. Set verificationOnly=true first to check whether the reservation can be cancelled (and surface any penalty warnings) without cancelling it. This is a write: NEVER retry after a timeout — verify with the get-reservation tool instead (a duplicate cancel attempt errors on an already-cancelled reservation).
opera_get_profileRetrieve one guest/customer profile by its OPERA profile id (from the profile search results or a reservation's profileIdList). Returns the guest's name, language, VIP status, email addresses, phone numbers, profile type/status, and last-stay summary.
opera_get_reservationRetrieve one reservation by its OPERA reservation id (the numeric id from the reservation search results, NOT the confirmation number — if the guest only has a confirmation number, search first). Returns stay dates, room and rate details, totals, status, guest name and contact basics, and reservation comments. Dates are ISO YYYY-MM-DD.
opera_get_reservation_folioRetrieve the folio (bill) for a reservation: window balances and itemized charges/postings with dates, descriptions and amounts. Use this when a checked-in guest asks about their bill, balance, or a specific charge. Folios only exist once the guest has checked in — an empty result for a future reservation is normal, not an error. reservationId is the OPERA-internal reservation id. Set reservationBalanceOnly=true for just the balance without itemized postings.
opera_search_profilesSearch the hotel's guest/customer profiles by name, email, or phone. Use this to check whether a guest profile exists or to find a profile id for the profile-read tool. profileName is the family name / last name (or company name). Returns a compact list of profile ids, names, profile type and status — no contact details.
opera_search_reservationsSearch the hotel's reservations by guest name, confirmation number, email, or stay dates. Use this to find a guest's reservation when they provide their name or confirmation number — then read full details with the get-reservation tool using the returned reservation id. All dates are ISO YYYY-MM-DD (e.g. 2026-09-01). Provide at least one search criterion. Returns a compact list: reservation ids, guest names, stay dates, room type, and status — no contact details.