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.
View Overlay File View on GitHub Overlay Specification

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

Raw ↑
# 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