Oracle Hospitality · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Oracle Hospitality Profile API
111 actions
111 updates
phrasing
extends
openapi/oracle-hospitality-profile-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Oracle Hospitality's API. It is a proposal applied on top of the contract, not a document Oracle Hospitality publishes.
What the actions change
x-apievangelist-phrasing
Targets 111 · first 16 shown; the file carries all of them
$.info
$.paths['/externalSystems/{extSystemCode}/memberships/{membershipType}/membershipIDs'].post
$.paths['/address'].get
$.paths['/certificates'].delete
$.paths['/companies'].post
$.paths['/companies/{corporateID}'].get
$.paths['/duplicateExternalSubscriptions'].get
$.paths['/duplicateOPERASubscriptions'].get
$.paths['/ecertificates'].get
$.paths['/ecertificates'].post
$.paths['/ecertificates/{certificateId}'].put
$.paths['/ecertificates/{certificateId}'].delete
$.paths['/ecertificates/{certificateId}/action/validate'].put
$.paths['/ecertificates/{certificateId}/extensions'].post
$.paths['/externalSystems/{extSystemCode}/profiles/{profileExternalId}'].get
$.paths['/externalSystems/{extSystemCode}/profiles/{profileExternalId}'].put
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Oracle Hospitality Profile API
version: 1.0.0
extends: openapi/oracle-hospitality-profile-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-09-26'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 110
- target: $.paths['/externalSystems/{extSystemCode}/memberships/{membershipType}/membershipIDs'].post
update:
x-apievangelist-phrasing:
intent: Generate a membership number via an external system
effect: write
questions:
- Can a new loyalty membership number be generated through an external system's membership endpoint?
- Where do I request a membership ID tied to a specific external system code?
instructions:
- text: Generate a new {membershipType} membership ID through external system {extSystemCode}.
slots:
membershipType: path.membershipType
extSystemCode: path.extSystemCode
- text: Ask external system {extSystemCode} to issue a fresh membership ID for program {membershipType}.
slots:
extSystemCode: path.extSystemCode
membershipType: path.membershipType
method: generated
generated: '2026-09-26'
- target: $.paths['/address'].get
update:
x-apievangelist-phrasing:
intent: Look up cities and states
effect: read
questions:
- Can I look up which city and state go with a postal code?
- Where can I find a list of cities matching a partial city name for address entry?
instructions:
- text: Look up the city and state for postal code {postalCode}.
slots:
postalCode: query.postalCode
- text: Find cities named {cityName} in state {state}.
slots:
cityName: query.cityName
state: query.state
method: generated
generated: '2026-09-26'
- target: $.paths['/certificates'].delete
update:
x-apievangelist-phrasing:
intent: Delete a certificate
effect: destructive
questions:
- How do I remove a certificate using the generic certificates endpoint?
- Can a certificate be deleted outright rather than an e-certificate on a profile?
instructions:
- text: Delete the certificate using the certificates endpoint.
- text: Remove a certificate record at hotel {hotelId}, not an e-certificate.
slots:
hotelId: header.x-hotelid
method: generated
generated: '2026-09-26'
- target: $.paths['/companies'].post
update:
x-apievangelist-phrasing:
intent: Create a company, travel agent, group or source profile
effect: write
questions:
- How do I create a new company or travel agent profile in OPERA Cloud?
- Can I set up a group or source profile and get back its OPERA ID?
instructions:
- text: 'Create a company profile with these details: {companyDetails}.'
slots:
companyDetails: requestBody.companyDetails
- text: Add a new travel agent profile linked to external reference {externalReferences}.
slots:
externalReferences: requestBody.externalReferences
method: generated
generated: '2026-09-26'
- target: $.paths['/companies/{corporateID}'].get
update:
x-apievangelist-phrasing:
intent: Get a company profile by corporate ID
effect: read
questions:
- What details are stored on a company profile if I know its corporate ID?
- Can I pull up a travel agent or group profile using the corporate ID rather than the profile ID?
instructions:
- text: Get the company profile with corporate ID {corporateID}.
slots:
corporateID: path.corporateID
- text: Show me the travel agent profile for corporate ID {corporateID}.
slots:
corporateID: path.corporateID
method: generated
generated: '2026-09-26'
- target: $.paths['/duplicateExternalSubscriptions'].get
update:
x-apievangelist-phrasing:
intent: Find profiles linked to multiple external profiles
effect: read
questions:
- Which OPERA Cloud profiles are subscribed to more than one external profile in the same external system?
- Can I find guest profiles that link to duplicate external records?
instructions:
- text: List OPERA profiles that are linked to several external profiles in one external system.
- text: Check whether profile {profileId} has duplicate external subscriptions.
slots:
profileId: query.profileId
method: generated
generated: '2026-09-26'
- target: $.paths['/duplicateOPERASubscriptions'].get
update:
x-apievangelist-phrasing:
intent: Find external profiles linked to multiple OPERA profiles
effect: read
questions:
- Which external profiles are linked to more than one OPERA Cloud profile?
- How can I spot an external record that maps to several OPERA guest profiles?
instructions:
- text: List external profiles that are subscribed to multiple OPERA Cloud profiles.
- text: Find duplicate OPERA subscriptions involving profile {profileId}.
slots:
profileId: query.profileId
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates'].get
update:
x-apievangelist-phrasing:
intent: List e-certificates on a profile
effect: read
questions:
- What e-certificates does a guest profile have in OPERA Cloud?
- Can I include inactive e-certificates or filter them by status?
instructions:
- text: List the e-certificates on profile {profileId}.
slots:
profileId: query.profileId
- text: Show e-certificates with status {status} at hotel {hotelId}.
slots:
status: query.status
hotelId: query.hotelId
- text: Look up the e-certificate with voucher number {voucherNo}.
slots:
voucherNo: query.voucherNo
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates'].post
update:
x-apievangelist-phrasing:
intent: Create an e-certificate on a profile
effect: write
questions:
- How do I issue a new e-certificate to a guest profile?
- Can I generate an eCertificate for a loyalty member?
instructions:
- text: 'Create an e-certificate on a profile with these generation details: {eCertificateGenerationDetails}.'
slots:
eCertificateGenerationDetails: requestBody.eCertificateGenerationDetails
- text: Issue a new e-certificate to the guest.
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates/{certificateId}'].put
update:
x-apievangelist-phrasing:
intent: Redeem an e-certificate
effect: destructive
questions:
- How do I mark an e-certificate as used when a guest redeems it?
- Can I consume an e-certificate so it can't be redeemed again?
instructions:
- text: Consume e-certificate {certificateId}.
slots:
certificateId: path.certificateId
- text: 'Redeem e-certificate {certificateId} with these consumption details: {consumeECertificates}.'
slots:
certificateId: path.certificateId
consumeECertificates: requestBody.consumeECertificates
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates/{certificateId}'].delete
update:
x-apievangelist-phrasing:
intent: Delete an e-certificate from a profile
effect: destructive
questions:
- How do I remove an e-certificate that was issued to a guest profile by mistake?
- Can an e-certificate be deleted from a profile entirely?
instructions:
- text: Delete e-certificate {certificateId}.
slots:
certificateId: path.certificateId
- text: Remove e-certificate {certificateId} from the guest's profile.
slots:
certificateId: path.certificateId
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates/{certificateId}/action/validate'].put
update:
x-apievangelist-phrasing:
intent: Verify an e-certificate number
effect: read
questions:
- How can I check that an e-certificate number is valid before accepting it?
- Is there a way to confirm an e-certificate can be used on a reservation?
instructions:
- text: Verify e-certificate {certificateId} with certificate number {certificateNo}.
slots:
certificateId: path.certificateId
certificateNo: requestBody.certificateNo
- text: Check whether e-certificate {certificateId} is valid.
slots:
certificateId: path.certificateId
method: generated
generated: '2026-09-26'
- target: $.paths['/ecertificates/{certificateId}/extensions'].post
update:
x-apievangelist-phrasing:
intent: Extend an e-certificate's expiry date
effect: write
questions:
- Can I push back the expiration date of a guest's e-certificate?
- How do I give an expiring e-certificate more time?
instructions:
- text: Extend e-certificate {certificateId} to expire on {expiryDate}.
slots:
certificateId: path.certificateId
expiryDate: requestBody.expiryDate
- text: Change the expiry of e-certificate {certificateId} to {expiryDate}.
slots:
certificateId: path.certificateId
expiryDate: requestBody.expiryDate
method: generated
generated: '2026-09-26'
- target: $.paths['/externalSystems/{extSystemCode}/profiles/{profileExternalId}'].get
update:
x-apievangelist-phrasing:
intent: Get a profile by its external system ID
effect: read
questions:
- How do I fetch a guest profile when I only know its ID in an external system?
- Can I look up an OPERA profile using the external profile ID a partner system gave me?
instructions:
- text: Get the profile with external ID {profileExternalId} from external system {extSystemCode}.
slots:
profileExternalId: path.profileExternalId
extSystemCode: path.extSystemCode
- text: Look up external profile {profileExternalId} in system {extSystemCode} for hotel {hotelId}.
slots:
profileExternalId: path.profileExternalId
extSystemCode: path.extSystemCode
hotelId: query.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/externalSystems/{extSystemCode}/profiles/{profileExternalId}'].put
update:
x-apievangelist-phrasing:
intent: Update a profile by its external system ID
effect: write
questions:
- Can I update a guest's profile details using the external system's profile ID instead of the OPERA ID?
- What do I need to change a profile identified by an external system code?
instructions:
- text: Update the profile with external ID {profileExternalId} in system {extSystemCode} with {profileDetails}.
slots:
profileExternalId: path.profileExternalId
extSystemCode: path.extSystemCode
profileDetails: requestBody.profileDetails
- text: Change guest details on external profile {profileExternalId} from {extSystemCode}.
slots:
profileExternalId: path.profileExternalId
extSystemCode: path.extSystemCode
method: generated
generated: '2026-09-26'
- target: $.paths['/guests'].post
update:
x-apievangelist-phrasing:
intent: Create a guest, contact or employee profile
effect: write
questions:
- How do I create a new guest profile in OPERA Cloud using the guests endpoint?
- Can I add a contact or employee profile and get its OPERA ID back?
instructions:
- text: 'Create a guest profile with these details: {guestDetails}.'
slots:
guestDetails: requestBody.guestDetails
- text: Add a new employee profile via the guests endpoint.
method: generated
generated: '2026-09-26'
- target: $.paths['/guests/{guestId}'].get
update:
x-apievangelist-phrasing:
intent: Get a guest profile by guest ID
effect: read
questions:
- What address, phone and preferences are stored for a guest if I have their guest ID?
- Can I retrieve a guest's full record through the guests endpoint?
instructions:
- text: Get guest {guestId}.
slots:
guestId: path.guestId
- text: Show guest {guestId}'s profile as seen by hotel {hotelId}.
slots:
guestId: path.guestId
hotelId: query.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/commissionAccount'].put
update:
x-apievangelist-phrasing:
intent: Copy a profile's commission account at a hotel
effect: write
questions:
- Can I copy a travel agent's commission account setup for use at another hotel?
- How do I duplicate the commission account on a profile for a specific property?
instructions:
- text: Copy the commission account on profile {profileId} for hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
- text: Duplicate profile {profileId}'s commission account at hotel {hotelId} using {profileCommissionAccountsInfo}.
slots:
profileId: path.profileId
hotelId: path.hotelId
profileCommissionAccountsInfo: requestBody.profileCommissionAccountsInfo
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/flexFieldCode/{flexFieldCode}'].delete
update:
x-apievangelist-phrasing:
intent: Delete a profile flex field value
effect: destructive
questions:
- How do I remove a custom flex field value from a guest profile at one hotel?
- Can I clear a single flex field on a profile by its code?
instructions:
- text: Delete flex field {flexFieldCode} from profile {profileId} at hotel {hotelId}.
slots:
flexFieldCode: path.flexFieldCode
profileId: path.profileId
hotelId: path.hotelId
- text: Clear the {flexFieldCode} flex field value on profile {profileId} for hotel {hotelId}.
slots:
flexFieldCode: path.flexFieldCode
profileId: path.profileId
hotelId: path.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/flexFieldValues'].get
update:
x-apievangelist-phrasing:
intent: Get a profile's flex field values at one hotel
effect: read
questions:
- What custom flex field values are set on a profile for a particular hotel?
- Can I filter a profile's flex fields at one property by flex field code?
instructions:
- text: Show flex field values on profile {profileId} at hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
- text: Get flex field {flexFieldCode} for profile {profileId} at hotel {hotelId}.
slots:
flexFieldCode: query.flexFieldCode
profileId: path.profileId
hotelId: path.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/flexFieldValues'].put
update:
x-apievangelist-phrasing:
intent: Update a profile flex field value
effect: write
questions:
- How do I change an existing flex field value on a guest profile?
- Can I overwrite a custom field that's already set on a profile at a hotel?
instructions:
- text: Update the flex field values on profile {profileId} at hotel {hotelId} to {flexFieldInfo}.
slots:
profileId: path.profileId
hotelId: path.hotelId
flexFieldInfo: requestBody.flexFieldInfo
- text: Change an existing flex field on profile {profileId} for hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/flexFieldValues'].post
update:
x-apievangelist-phrasing:
intent: Add a flex field value to a profile
effect: write
questions:
- Can I store a new custom flex field value on a guest profile?
- How do I set a flex field on a profile that doesn't have one yet?
instructions:
- text: Add flex field value {flexFieldInfo} to profile {profileId} at hotel {hotelId}.
slots:
flexFieldInfo: requestBody.flexFieldInfo
profileId: path.profileId
hotelId: path.hotelId
- text: Create a new flex field entry on profile {profileId} at hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/hotels/{hotelId}/profiles/{profileId}/reprocess'].put
update:
x-apievangelist-phrasing:
intent: Reprocess a single stage record
effect: write
questions:
- How do I rerun processing on one staged record that failed?
- Can I reprocess just one stage record for a profile at a hotel?
instructions:
- text: Reprocess the stage record for profile {profileId} at hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
- text: Retry the single staged record {profileId} for hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: path.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/membershipTierProjections'].get
update:
x-apievangelist-phrasing:
intent: Get membership tier upgrade and downgrade projections
effect: read
questions:
- Which loyalty members are projected to be upgraded or downgraded a tier?
- Can I see a member's projected tier as of a certain date?
instructions:
- text: Show tier projections for membership {membershipId}.
slots:
membershipId: query.membershipId
- text: List {projectionType} tier projections for program {membershipType} as of {projectionDate}.
slots:
projectionType: query.projectionType
membershipType: query.membershipType
projectionDate: query.projectionDate
method: generated
generated: '2026-09-26'
- target: $.paths['/memberships/{membershipId}/fullfillmentExportLogs'].get
update:
x-apievangelist-phrasing:
intent: Get fulfillment export logs for a membership
effect: read
questions:
- Where can I see the fulfillment export history for a loyalty membership?
- Was a member's fulfillment record exported, and when?
instructions:
- text: Get fulfillment export logs for membership {membershipId}.
slots:
membershipId: path.membershipId
- text: Show the export log entries for membership {membershipId} of type {membershipType}.
slots:
membershipId: path.membershipId
membershipType: query.membershipType
method: generated
generated: '2026-09-26'
- target: $.paths['/memberships/{membershipType}/membershipNumbers'].post
update:
x-apievangelist-phrasing:
intent: Generate a membership number for a program
effect: write
questions:
- How can I auto-generate the next membership card number for a loyalty program in OPERA Cloud?
- Is there a way to get a new membership number for a program without going through an external system?
instructions:
- text: Generate the next membership number for program {membershipType}.
slots:
membershipType: path.membershipType
- text: Create a new card number for {membershipType} membership directly in OPERA, not via an external system.
slots:
membershipType: path.membershipType
method: generated
generated: '2026-09-26'
- target: $.paths['/processStagedProfile'].put
update:
x-apievangelist-phrasing:
intent: Process one staged profile
effect: write
questions:
- How do I process a profile that's sitting in staging?
- Can I push a single staged profile through so it becomes a real profile?
instructions:
- text: Process staged profile {stagedProfile}.
slots:
stagedProfile: requestBody.stagedProfile
- text: Run processing on this one staged profile.
method: generated
generated: '2026-09-26'
- target: $.paths['/profileMatch'].get
update:
x-apievangelist-phrasing:
intent: Find a unique guest profile ID before booking
effect: read
questions:
- Before creating a reservation, how can I check whether the guest already has a profile so I don't create a duplicate?
- Can I get a guest's profile ID by last name and email?
instructions:
- text: Find the profile ID for guest {lastName} with email {email}.
slots:
lastName: query.lastName
email: query.email
- text: Check for an existing profile for {firstName} {lastName} with membership card {membershipCardNumber}.
slots:
firstName: query.firstName
lastName: query.lastName
membershipCardNumber: query.membershipCardNumber
method: generated
generated: '2026-09-26'
- target: $.paths['/profileMatch/searches'].post
update:
x-apievangelist-phrasing:
intent: Find a unique guest profile ID via a search body
effect: read
questions:
- Can I send guest identity details in a request body to find their single matching profile ID?
- Is there a POST version of the unique-profile lookup for passing ID document numbers?
instructions:
- text: Search for a unique profile matching last name {lastName} and ID number {identificationNumber}.
slots:
lastName: requestBody.lastName
identificationNumber: requestBody.identificationNumber
- text: Post a unique-profile search for {lastName} with email {email}.
slots:
lastName: requestBody.lastName
email: requestBody.email
method: generated
generated: '2026-09-26'
- target: $.paths['/profileTransactions/{profileId}'].get
update:
x-apievangelist-phrasing:
intent: List a profile's stay and membership transactions
effect: read
questions:
- What stay record and membership adjustment transactions are tied to a profile?
- How far back can I query a profile's transactions at once?
instructions:
- text: List transactions for profile {profileId} from {startDate} to {endDate}.
slots:
profileId: path.profileId
startDate: query.startDate
endDate: query.endDate
- text: Show profile {profileId}'s transactions for confirmation number {confirmationNumber}.
slots:
profileId: path.profileId
confirmationNumber: query.confirmationNumber
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles'].get
update:
x-apievangelist-phrasing:
intent: Search profiles with query filters
effect: read
questions:
- How can I find guest profiles by name, city or email in OPERA Cloud?
- Can I search profiles by VIP code or membership level?
- Which profiles last stayed before a given date?
instructions:
- text: Search profiles named {profileName} in {city}.
slots:
profileName: query.profileName
city: query.city
- text: Find profiles with email {email}.
slots:
email: query.email
- text: List company profiles with AR number {aRNumber}.
slots:
aRNumber: query.aRNumber
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles'].post
update:
x-apievangelist-phrasing:
intent: Create a profile
effect: write
questions:
- How do I create a new profile of any type through the general profiles endpoint?
- What do I get back after creating a profile, and does it include the OPERA ID?
instructions:
- text: Create a profile with details {profileDetails}.
slots:
profileDetails: requestBody.profileDetails
- text: Create a profile linked to external references {externalReferences}.
slots:
externalReferences: requestBody.externalReferences
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/action/validate'].get
update:
x-apievangelist-phrasing:
intent: Check a profile's allowed actions and attached records
effect: read
questions:
- Can I check whether a profile has attached records before I act on it?
- What actions are allowed on a given profile?
instructions:
- text: Check allowed actions and attached records for profile {id}.
slots:
id: query.id
- text: Validate profile {id} using check instruction {checkProfileInstruction}.
slots:
id: query.id
checkProfileInstruction: query.checkProfileInstruction
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/activityLog'].get
update:
x-apievangelist-phrasing:
intent: Get a profile's activity log
effect: read
questions:
- Who changed a guest's profile and when?
- Can I filter the profile change history by date range or user?
instructions:
- text: Show the activity log between {fromDate} and {toDate}.
slots:
fromDate: query.fromDate
toDate: query.toDate
- text: Get profile activity log entries matching {searchText}.
slots:
searchText: query.searchText
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/profileMatches'].get
update:
x-apievangelist-phrasing:
intent: Find potential duplicate profile matches
effect: read
questions:
- Which existing profiles might be the same person as a given name and address?
- Can I set a minimum match percentage when looking for similar profiles?
instructions:
- text: Find potential profile matches for {firstName} {lastName} in {city}.
slots:
firstName: query.firstName
lastName: query.lastName
city: query.city
- text: List profiles matching email {email} at {matchPercentage} percent or better.
slots:
email: query.email
matchPercentage: query.matchPercentage
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/profileMatches/searches'].post
update:
x-apievangelist-phrasing:
intent: Find potential profile matches via a search body
effect: read
questions:
- Is there a POST search that returns a list of possible matching profiles instead of just one ID?
- Can I send address and phone in the body to get candidate profile matches?
instructions:
- text: Post a search for candidate profiles matching {lastName} at phone {phone}.
slots:
lastName: requestBody.lastName
phone: requestBody.phone
- text: Search potential profile matches for company {legalCompany} in {country}.
slots:
legalCompany: requestBody.legalCompany
country: requestBody.country
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/searches'].post
update:
x-apievangelist-phrasing:
intent: Search profiles with a request body
effect: read
questions:
- Can I send profile search criteria in a POST body instead of query parameters?
- Is there a body-based profile search for long lists of profile IDs?
instructions:
- text: Run a body-based profile search for name {profileName}.
slots:
profileName: requestBody.profileName
- text: Post a profile search for tax ID {taxId}.
slots:
taxId: requestBody.taxId
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/stageProfileMatches'].get
update:
x-apievangelist-phrasing:
intent: Find matches for a staged profile
effect: read
questions:
- Which existing profiles could a staged profile be merged into?
- Can I see potential matches for a suspended profile at a hotel?
instructions:
- text: Find potential matches for staged profile {resortNameId} at hotel {hotelId}.
slots:
resortNameId: query.resortNameId
hotelId: query.hotelId
- text: List existing profiles similar to staged profile {resortNameId}.
slots:
resortNameId: query.resortNameId
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/{profileId}'].get
update:
x-apievangelist-phrasing:
intent: Get a profile by OPERA profile ID
effect: read
questions:
- How do I retrieve any type of profile, company or individual, by its OPERA profile ID?
- Can I mark a profile as recently accessed when I open it?
instructions:
- text: Get profile {profileId}.
slots:
profileId: path.profileId
- text: Fetch profile {profileId} as seen at hotel {hotelId}.
slots:
profileId: path.profileId
hotelId: query.hotelId
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/{profileId}'].put
update:
x-apievangelist-phrasing:
intent: Update a profile by OPERA profile ID
effect: write
questions:
- How do I update a guest's details on their profile using the OPERA profile ID?
- Can I change a profile's allowed actions when I edit it?
instructions:
- text: Update profile {profileId} with {profileDetails}.
slots:
profileId: path.profileId
profileDetails: requestBody.profileDetails
- text: Change the guest details on profile {profileId}.
slots:
profileId: path.profileId
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/{profileId}'].delete
update:
x-apievangelist-phrasing:
intent: Forget (anonymize) a guest profile
effect: destructive
questions:
- How do I honor a guest's request to be forgotten in OPERA Cloud?
- Can I anonymize a contact profile?
instructions:
- text: Forget profile {profileId}.
slots:
profileId: path.profileId
- text: Anonymize guest profile {profileId}.
slots:
profileId: path.profileId
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/{profileId}/accounts'].get
update:
x-apievangelist-phrasing:
intent: List accounts on a profile
effect: read
questions:
- Which accounts are listed on a company profile?
- Can I limit a profile's accounts to certain hotels?
instructions:
- text: List the accounts on profile {profileId}.
slots:
profileId: path.profileId
- text: Show profile {profileId}'s accounts for hotels {hotelIds}.
slots:
profileId: path.profileId
hotelIds: query.hotelIds
method: generated
generated: '2026-09-26'
- target: $.paths['/profiles/{profileId}/attachments'].get
update:
x-apievangelist-phrasing:
intent: List attachments on a profile
effect: read
questions:
- What files are attached to a guest profile?
- Can I find a profile attachment by file name?
instructions:
- text: List attachments on profile {profileId}.
slots:
profileId: path.profileId
- text: Find the attachment named {attachedFileName} on profile {profileId}.
slots:
attachedFileName: query.attachedFileName
profileId: path.profileId
method: generated
generated: '2026-09-26'
# --- truncated at 32 KB (78 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/oracle-hospitality/refs/heads/main/overlays/oracle-hospitality-profile-api-phrasing-overlay.yaml