# 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' - target: $.paths['/profiles/{profileId}/attachments/{attachmentId}'].delete update: x-apievangelist-phrasing: intent: Delete an attachment from a profile effect: destructive questions: - How do I remove a file attached to a guest profile? - Can a single profile attachment be deleted by its ID? instructions: - text: Delete attachment {attachmentId} from profile {profileId}. slots: attachmentId: path.attachmentId profileId: path.profileId - text: Remove file {attachmentId} attached to profile {profileId}. slots: attachmentId: path.attachmentId profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/awardsAndCertificates'].get update: x-apievangelist-phrasing: intent: Get awards and certificates on a profile effect: read questions: - What awards and certificates does a loyalty member have on their profile? - Can I see a guest's awards at a particular hotel? instructions: - text: Show awards and certificates for profile {profileId}. slots: profileId: path.profileId - text: List profile {profileId}'s awards at hotel {hotelId}. slots: profileId: path.profileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/cashieringDetails'].get update: x-apievangelist-phrasing: intent: Get a profile's billing and routing details effect: read questions: - What routing instructions and payment methods are set on a company profile? - Can I view a travel agent profile's financial details for specific hotels? instructions: - text: Get the cashiering details on profile {profileId}. slots: profileId: path.profileId - text: Show routing instructions for profile {profileId} at hotels {hotelIds}. slots: profileId: path.profileId hotelIds: query.hotelIds method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/cashieringDetails'].put update: x-apievangelist-phrasing: intent: Update a profile's billing and routing details effect: write questions: - How do I change the billing or routing instructions on a company profile? - Can I update a profile's financial settings? instructions: - text: Update cashiering details on profile {profileId} to {profileCashieringDetailList}. slots: profileId: path.profileId profileCashieringDetailList: requestBody.profileCashieringDetailList - text: Change routing instructions on profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/commissionAccount'].get update: x-apievangelist-phrasing: intent: Get a profile's commission account effect: read questions: - Which commission account is set on a travel agent profile? - Can I see commission account details for specific hotels? instructions: - text: Get the commission account on profile {profileId}. slots: profileId: path.profileId - text: Show profile {profileId}'s commission account for hotels {hotelIds}. slots: profileId: path.profileId hotelIds: query.hotelIds method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/commissionAccount'].put update: x-apievangelist-phrasing: intent: Apply a commission account to a profile effect: write questions: - How do I apply or replace the commission account on an existing travel agent profile? - Can I set a commission account on a profile that already has one? instructions: - text: Set the commission account on profile {profileId} using {criteria}. slots: profileId: path.profileId criteria: requestBody.criteria - text: Apply a replacement commission account to profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/commissionAccount'].post update: x-apievangelist-phrasing: intent: Add a commission account to a profile effect: write questions: - How do I add a new commission account to a travel agent or source profile? - Which profile types are allowed to have a commission account? instructions: - text: Add a commission account to profile {profileId} with {criteria}. slots: profileId: path.profileId criteria: requestBody.criteria - text: Create a new commission account on travel agent profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/commissionAccount'].delete update: x-apievangelist-phrasing: intent: Remove a commission account from a profile effect: destructive questions: - How do I delete a commission account from a travel agent profile? - Can I remove a commission account for one hotel only? instructions: - text: Delete the commission account from profile {profileId}. slots: profileId: path.profileId - text: Remove commission code {commissionCode} from profile {profileId} at hotel {hotelId}. slots: commissionCode: query.commissionCode profileId: path.profileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/emails'].post update: x-apievangelist-phrasing: intent: Save an email to a profile effect: write questions: - Can I log an email I received against a contact or account profile? - How do I store an email with subject and body on a profile? instructions: - text: Store an email from {fromAddress} with subject {subject} on profile {profileId}. slots: fromAddress: requestBody.fromAddress subject: requestBody.subject profileId: path.profileId - text: 'Save this email to profile {profileId}: {emailBody}.' slots: profileId: path.profileId emailBody: requestBody.emailBody method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/flexFieldValues'].get update: x-apievangelist-phrasing: intent: Get a profile's flex field values across hotels effect: read questions: - What flex field values does a profile have across several hotels at once? - Can I pull flex fields for a profile across multiple properties? instructions: - text: Get flex field values for profile {profileId} across hotels {hotelIds}. slots: profileId: path.profileId hotelIds: query.hotelIds - text: Show flex field {flexFieldCode} on profile {profileId} for hotels {hotelIds}. slots: flexFieldCode: query.flexFieldCode profileId: path.profileId hotelIds: query.hotelIds method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/forecasts'].get update: x-apievangelist-phrasing: intent: List account forecasts for a hotel effect: read questions: - What revenue forecasts exist for a company account at a hotel? - Can I see account forecasts starting from a given period? instructions: - text: List account forecasts for profile {profileId} at hotel {hotelId}. slots: profileId: path.profileId hotelId: path.hotelId - text: Show forecasts for account {profileId} at hotel {hotelId} from period {fromPeriodCode}. slots: profileId: path.profileId hotelId: path.hotelId fromPeriodCode: query.fromPeriodCode method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/forecasts'].post update: x-apievangelist-phrasing: intent: Create an account forecast at a hotel effect: write questions: - How do I add a new forecast for a company account at a hotel? - Can I record expected business for an account by period? instructions: - text: Create an account forecast for profile {profileId} at hotel {hotelId} with {forecastsInformation}. slots: profileId: path.profileId hotelId: path.hotelId forecastsInformation: requestBody.forecastsInformation - text: Add a new forecast for account {profileId} at hotel {hotelId}. slots: profileId: path.profileId hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/forecasts'].delete update: x-apievangelist-phrasing: intent: Delete several account forecasts at once effect: destructive questions: - Can I delete several account forecast periods in one request? - How do I clear multiple forecasts for an account at a hotel? instructions: - text: Delete account forecasts for periods {periodCodes} on profile {profileId} at hotel {hotelId}. slots: periodCodes: query.periodCodes profileId: path.profileId hotelId: path.hotelId - text: Bulk-remove forecasts for account {profileId} at hotel {hotelId}. slots: profileId: path.profileId hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/forecasts/periodCodes/{periodCode}'].put update: x-apievangelist-phrasing: intent: Update an account forecast for one period effect: write questions: - How do I change the forecast for a specific period on a company account? - Can I edit an existing account forecast if I know its period code? instructions: - text: Update the {periodCode} forecast for profile {profileId} at hotel {hotelId}. slots: periodCode: path.periodCode profileId: path.profileId hotelId: path.hotelId - text: Change account {profileId}'s forecast for period {periodCode} at hotel {hotelId} to {forecastsInformation}. slots: profileId: path.profileId periodCode: path.periodCode hotelId: path.hotelId forecastsInformation: requestBody.forecastsInformation method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/forecasts/periodCodes/{periodCode}'].delete update: x-apievangelist-phrasing: intent: Delete an account forecast for one period effect: destructive questions: - How do I remove the forecast for a single period on an account? - Can I delete one account forecast by its period code? instructions: - text: Delete the {periodCode} forecast for profile {profileId} at hotel {hotelId}. slots: periodCode: path.periodCode profileId: path.profileId hotelId: path.hotelId - text: Remove period {periodCode} from account {profileId}'s forecasts at hotel {hotelId}. slots: periodCode: path.periodCode profileId: path.profileId hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/preferenceType/{preferenceType}/preferences/{preferenceCode}'].delete update: x-apievangelist-phrasing: intent: Remove a hotel-specific preference from a profile effect: destructive questions: - A guest no longer wants a high floor room at one hotel, how do I remove that preference? - Can I delete a property-level preference from a profile? instructions: - text: Delete preference {preferenceCode} of type {preferenceType} from profile {profileId} at hotel {hotelId}. slots: preferenceCode: path.preferenceCode preferenceType: path.preferenceType profileId: path.profileId hotelId: path.hotelId - text: Remove hotel {hotelId}'s {preferenceType} preference {preferenceCode} for guest {profileId}. slots: hotelId: path.hotelId preferenceType: path.preferenceType preferenceCode: path.preferenceCode profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/hotels/{hotelId}/stagedProfile'].delete update: x-apievangelist-phrasing: intent: Delete a staged profile effect: destructive questions: - How do I discard a profile that's stuck in staging at a hotel? - Can I delete a staged profile instead of merging it? instructions: - text: Delete staged profile {profileId} at hotel {hotelId}. slots: profileId: path.profileId hotelId: path.hotelId - text: Discard the staged record for profile {profileId} at hotel {hotelId}. slots: profileId: path.profileId hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/links'].get update: x-apievangelist-phrasing: intent: List profiles linked to a profile effect: read questions: - Which contacts or companies are linked to a given profile? - Is there a limit on how many linked profiles come back? instructions: - text: List profiles linked to profile {profileId}. slots: profileId: path.profileId - text: Show linked profiles of type {profileTypes} for profile {profileId}. slots: profileTypes: query.profileTypes profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/matches'].get update: x-apievangelist-phrasing: intent: Find profiles that match an existing profile effect: read questions: - Are there other profiles that look like duplicates of this profile? - Can I check an existing profile for matches at one hotel? instructions: - text: Find profiles that match profile {profileId}. slots: profileId: path.profileId - text: Check profile {profileId} for duplicates at hotel {hotelId}. slots: profileId: path.profileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/membershipType/{membershipType}/membershipId/{membershipId}'].put update: x-apievangelist-phrasing: intent: Update a membership on a profile effect: write questions: - How do I update a guest's loyalty or frequent flyer membership details? - Can I change an existing membership on a profile by its membership ID? instructions: - text: Update membership {membershipId} of type {membershipType} on profile {profileId}. slots: membershipId: path.membershipId membershipType: path.membershipType profileId: path.profileId - text: Change profile {profileId}'s {membershipType} membership {membershipId} to {profileMemberships}. slots: profileId: path.profileId membershipType: path.membershipType membershipId: path.membershipId profileMemberships: requestBody.profileMemberships method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/membershipType/{membershipType}/membershipId/{membershipId}'].delete update: x-apievangelist-phrasing: intent: Remove a membership from a profile effect: destructive questions: - How do I remove a frequent flyer membership from a guest profile? - Can I delete a loyalty membership that was added by mistake? instructions: - text: Delete membership {membershipId} of type {membershipType} from profile {profileId}. slots: membershipId: path.membershipId membershipType: path.membershipType profileId: path.profileId - text: Remove the {membershipType} membership {membershipId} from guest {profileId}. slots: membershipType: path.membershipType membershipId: path.membershipId profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/memberships'].post update: x-apievangelist-phrasing: intent: Add a membership to a profile effect: write questions: - How do I add a guest's airline frequent flyer number to their profile? - Can a profile hold several loyalty memberships? instructions: - text: Add membership {profileMemberships} to profile {profileId}. slots: profileMemberships: requestBody.profileMemberships profileId: path.profileId - text: Enroll guest {profileId} in a new membership. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/owners'].get update: x-apievangelist-phrasing: intent: List owners assigned to a profile effect: read questions: - Who are the sales owners on a company profile? - Which owner is responsible for a given account? instructions: - text: List the owners on profile {profileId}. slots: profileId: path.profileId - text: Tell me who owns account {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/owners'].put update: x-apievangelist-phrasing: intent: Change the owners on a profile effect: write questions: - How do I reassign the owner of an account profile to someone else? - Can I update an existing owner on a profile? instructions: - text: Change the owners on profile {profileId} to {criteria}. slots: profileId: path.profileId criteria: requestBody.criteria - text: Reassign the existing owner on profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/owners'].post update: x-apievangelist-phrasing: intent: Assign an owner to a profile effect: write questions: - How do I assign a salesperson as the owner of a profile? - Can I add an additional owner to an account? instructions: - text: Assign owner {criteria} to profile {profileId}. slots: criteria: requestBody.criteria profileId: path.profileId - text: Add a new owner to profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/preferenceType/{preferenceType}/preferences/{preferenceCode}'].delete update: x-apievangelist-phrasing: intent: Remove a global preference from a profile effect: destructive questions: - How do I delete a guest preference that applies across all hotels, not just one? - Can I remove a chain-wide preference code from a profile? instructions: - text: Delete global preference {preferenceCode} of type {preferenceType} from profile {profileId}. slots: preferenceCode: path.preferenceCode preferenceType: path.preferenceType profileId: path.profileId - text: Remove the chain-wide {preferenceType} preference {preferenceCode} for guest {profileId}. slots: preferenceType: path.preferenceType preferenceCode: path.preferenceCode profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/preferences'].get update: x-apievangelist-phrasing: intent: List preferences on a profile effect: read questions: - What room and service preferences does a guest have on file? - Can I see only one hotel's preferences for a guest? instructions: - text: List preferences on profile {profileId}. slots: profileId: path.profileId - text: Show guest {profileId}'s preferences at hotel {hotelId}. slots: profileId: path.profileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/preferences'].put update: x-apievangelist-phrasing: intent: Distribute a profile's preferences effect: write questions: - Can I distribute a guest's preferences so they apply more widely? - How do I push preferences on one profile out to other profiles? instructions: - text: Distribute preferences {preferenceCollections} on profile {profileId}. slots: preferenceCollections: requestBody.preferenceCollections profileId: path.profileId - text: Distribute the preferences stored on profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/preferences'].post update: x-apievangelist-phrasing: intent: Add preferences to a profile effect: write questions: - How do I record that a guest prefers a high floor or a feather-free pillow? - Can I add several preferences to a profile at once? instructions: - text: Add preferences {preferenceCollections} to profile {profileId}. slots: preferenceCollections: requestBody.preferenceCollections profileId: path.profileId - text: Save a new room preference for guest {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/relationships'].get update: x-apievangelist-phrasing: intent: List a profile's relationships effect: read questions: - What relationships does a profile have, such as employer or contact links? - Can I see only relationships where the profile is primary? instructions: - text: List relationships for profile {profileId}. slots: profileId: path.profileId - text: Show the primary relationships for profile {profileId}. slots: profileId: path.profileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/reservations/action/validate'].put update: x-apievangelist-phrasing: intent: Check whether a profile has past or future bookings effect: read questions: - Does this guest have any upcoming or past reservations on their profile? - Can I confirm a profile has no bookings before removing it? instructions: - text: Check if profile {profileId} has past or future bookings. slots: profileId: path.profileId - text: Validate reservations on profile {profileId} with {criteria}. slots: profileId: path.profileId criteria: requestBody.criteria method: generated generated: '2026-09-26' - target: $.paths['/profiles/{profileId}/stayHistory'].get update: x-apievangelist-phrasing: intent: Get a profile's stay history and future stays effect: read questions: - Where has this guest stayed before, and what future reservations do they have? - Can I limit a guest's stay history to one hotel? instructions: - text: Show stay history for profile {profileId}. slots: profileId: path.profileId - text: Get guest {profileId}'s stays at hotel {hotelId}. slots: profileId: path.profileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{sourceProfileId}/relationships/{targetProfileId}'].put update: x-apievangelist-phrasing: intent: Change a relationship between two profiles effect: write questions: - How do I change how two profiles are related, like switching a contact to a different role? - Can I update an existing link between a source and target profile? instructions: - text: Change the relationship between profile {sourceProfileId} and profile {targetProfileId}. slots: sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId - text: Update the link from {sourceProfileId} to {targetProfileId} to {relationship}. slots: sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId relationship: requestBody.relationship method: generated generated: '2026-09-26' - target: $.paths['/profiles/{sourceProfileId}/relationships/{targetProfileId}'].post update: x-apievangelist-phrasing: intent: Create a relationship between two profiles effect: write questions: - How do I link a contact profile to a company profile? - Can I create a new relationship between two guest profiles? instructions: - text: Link profile {sourceProfileId} to profile {targetProfileId} as {relationship}. slots: sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId relationship: requestBody.relationship - text: Create a relationship from {sourceProfileId} to {targetProfileId}. slots: sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{sourceProfileId}/relationships/{targetProfileId}'].delete update: x-apievangelist-phrasing: intent: Delete a relationship between two profiles effect: destructive questions: - How do I unlink a contact from a company profile? - What relation types do I need to specify to remove a profile relationship? instructions: - text: Remove the {sourceRelation} to {targetRelation} link between {sourceProfileId} and {targetProfileId}. slots: sourceRelation: query.sourceRelation targetRelation: query.targetRelation sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId - text: Unlink profile {sourceProfileId} from profile {targetProfileId}. slots: sourceProfileId: path.sourceProfileId targetProfileId: path.targetProfileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{survivorProfileId}/merges'].post update: x-apievangelist-phrasing: intent: Merge two profiles into one effect: destructive questions: - How do I merge two duplicate guest profiles into one? - Which profile survives when I combine duplicates? instructions: - text: Merge profile {victimProfileId} into survivor profile {survivorProfileId}. slots: victimProfileId: requestBody.victimProfileId survivorProfileId: path.survivorProfileId - text: Combine the duplicate into profile {survivorProfileId}. slots: survivorProfileId: path.survivorProfileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{survivorProfileId}/merges/snapshot'].get update: x-apievangelist-phrasing: intent: Preview the result of merging two profiles effect: read questions: - Can I preview what a merged profile will look like before I merge two guests? - What would the surviving profile contain after a merge? instructions: - text: Show a merge snapshot of profile {toBeMergedId} into {survivorProfileId}. slots: toBeMergedId: query.toBeMergedId survivorProfileId: path.survivorProfileId - text: Preview merging into survivor profile {survivorProfileId}. slots: survivorProfileId: path.survivorProfileId method: generated generated: '2026-09-26' - target: $.paths['/profiles/{survivorProfileId}/stageProfiles/snapshot'].get update: x-apievangelist-phrasing: intent: Preview merging a staged profile effect: read questions: - Can I preview how a staged profile would merge into an existing profile? - What will the survivor look like if I merge a suspended profile into it? instructions: - text: Preview merging staged profile {resortProfileId} into {survivorProfileId}. slots: resortProfileId: query.resortProfileId survivorProfileId: path.survivorProfileId - text: Show the stage-merge snapshot for survivor {survivorProfileId} at hotel {hotelId}. slots: survivorProfileId: path.survivorProfileId hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/profilesByIds'].get update: x-apievangelist-phrasing: intent: Fetch several profiles by their IDs effect: read questions: - Can I fetch several profiles at once if I already have their IDs? - How do I look up profiles by a list of corporate IDs? instructions: - text: Get the profiles with IDs {profileIds}. slots: profileIds: query.profileIds - text: Fetch profiles for corporate IDs {corporateIds}. slots: corporateIds: query.corporateIds method: generated generated: '2026-09-26' - target: $.paths['/profilesMatchList'].put update: x-apievangelist-phrasing: intent: Mark profile matches to skip or keep effect: write questions: - How do I mark a flagged duplicate pair as not a match so it's skipped? - Can I update several profile match records at once? instructions: - text: Update the profile match list with {matchList}. slots: matchList: requestBody.matchList - text: Mark these profile matches as do-not-merge. method: generated generated: '2026-09-26' - target: $.paths['/profilesMatchList/profileType/{profileType}'].get update: x-apievangelist-phrasing: intent: List suspected duplicate profiles by type effect: read questions: - Which profiles have been flagged as likely duplicates based on the match rules? - Can I list matches above the upper threshold or marked do-not-merge? instructions: - text: List the profile match list for profile type {profileType}. slots: profileType: path.profileType - text: Show {profileType} matches for surname {surname}. slots: profileType: path.profileType surname: query.surname method: generated generated: '2026-09-26' - target: $.paths['/reProcessStageRecords'].put update: x-apievangelist-phrasing: intent: Reprocess all stage records effect: write questions: - How do I rerun processing for every stage record in bulk? - Can I kick off a reprocess of all staged records? instructions: - text: Reprocess all stage records using {reProcessStageRecords}. slots: reProcessStageRecords: requestBody.reProcessStageRecords - text: Start a bulk reprocess of every stage record. method: generated generated: '2026-09-26' - target: $.paths['/reProcessStageRecords/logs'].get update: x-apievangelist-phrasing: intent: Get logs of stage record reprocessing effect: read questions: - Where can I see the logs of reprocess and rematch jobs? - Can I filter stage-record reprocess logs by job ID? instructions: - text: Show reprocess logs for job {jobId}. slots: jobId: query.jobId - text: List reprocess and rematch logs since {fromDate}. slots: fromDate: query.fromDate method: generated generated: '2026-09-26' - target: $.paths['/recentlyAccessedProfiles'].get update: x-apievangelist-phrasing: intent: List recently accessed profiles effect: read questions: - Which profiles have I opened recently? - Can I see profiles accessed since a particular date? instructions: - text: List my recently accessed profiles. - text: Show profiles accessed on {accessDate}. slots: accessDate: query.accessDate method: generated generated: '2026-09-26' - target: $.paths['/service/profileService/cache'].delete update: x-apievangelist-phrasing: intent: Clear the profile service cache effect: destructive questions: - How do I flush the cache for the profile service? - Can I reset cached profile data on the server? instructions: - text: Clear the profile service cache. - text: Flush cached profile service data for hotel {hotelId}. slots: hotelId: header.x-hotelid method: generated generated: '2026-09-26' - target: $.paths['/services/profile/status'].get update: x-apievangelist-phrasing: intent: Check the profile service status effect: read questions: - Is the OPERA Cloud profile service up right now? - How can I health-check the profile API? instructions: - text: Ping the profile service. - text: Check whether the profile service is running for hotel {hotelId}. slots: hotelId: header.x-hotelid method: generated generated: '2026-09-26' - target: $.paths['/stagedProfile/{id}'].get update: x-apievangelist-phrasing: intent: Get a staged profile effect: read questions: - How do I review a single suspended profile before deciding to merge or add it? - Can I pull the details of one staged profile by ID? instructions: - text: Get staged profile {id}. slots: id: path.id - text: Show staged profile {id} at hotel {hotelId}. slots: id: path.id hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/stagedProfile/{id}'].put update: x-apievangelist-phrasing: intent: Update a staged profile effect: write questions: - Can I correct the details on a staged profile before it's processed? - How do I edit a suspended profile? instructions: - text: Update staged profile {id} with {stagedProfile}. slots: id: path.id stagedProfile: requestBody.stagedProfile - text: Edit the staged profile {id}. slots: id: path.id method: generated generated: '2026-09-26' - target: $.paths['/stagedProfiles'].get update: x-apievangelist-phrasing: intent: List staged profiles effect: read questions: - Which profiles are currently suspended in staging for review? - Can I filter staged profiles by stage status or import date? instructions: - text: List staged profiles with status {stageStatus}. slots: stageStatus: query.stageStatus - text: Show staged profiles imported on {importDate} for hotels {hotelIds}. slots: importDate: query.importDate hotelIds: query.hotelIds method: generated generated: '2026-09-26' - target: $.paths['/stagedProfiles/searches'].post update: x-apievangelist-phrasing: intent: Search staged profiles with a request body effect: read questions: - Is there a POST search for staged profiles when I have many filters? - Can I search suspended profiles by membership number in a request body? instructions: - text: Post a staged profile search for membership number {membershipNumber}. slots: membershipNumber: requestBody.membershipNumber - text: Search staged profiles by error description {errorDescription}. slots: errorDescription: requestBody.errorDescription method: generated generated: '2026-09-26' - target: $.paths['/stayMembership'].post update: x-apievangelist-phrasing: intent: Attach or replace a membership on a stay record effect: write questions: - How do I add a loyalty membership to a stay that was recorded without one? - Can I swap the membership on a stay record for a different card? instructions: - text: Attach membership {newMembershipCardNo} to stay record {stayRecordId} in {attachMode} mode. slots: newMembershipCardNo: requestBody.newMembershipCardNo stayRecordId: requestBody.stayRecordId attachMode: requestBody.attachMode - text: Replace card {oldMembershipCardNo} with {newMembershipCardNo} on stay {stayRecordId} using mode {attachMode}. slots: oldMembershipCardNo: requestBody.oldMembershipCardNo newMembershipCardNo: requestBody.newMembershipCardNo stayRecordId: requestBody.stayRecordId attachMode: requestBody.attachMode method: generated generated: '2026-09-26' - target: $.paths['/stayRecord'].post update: x-apievangelist-phrasing: intent: Upload a stay record effect: write questions: - How do I upload a stay record to loyalty from an outside source? - Can I load stay record columns into OPERA? instructions: - text: Upload stay record {stayRecord}. slots: stayRecord: requestBody.stayRecord - text: Send a new stay record to the loyalty system. method: generated generated: '2026-09-26' - target: $.paths['/stayRecord/{stayRecordId}'].get update: x-apievangelist-phrasing: intent: Get a stay record's details effect: read questions: - What daily rates and revenue are on a specific stay record? - Can I see the user-defined fields on a stay? instructions: - text: Get details for stay record {stayRecordId}. slots: stayRecordId: path.stayRecordId - text: Show revenue and daily rates for stay {stayRecordId}. slots: stayRecordId: path.stayRecordId method: generated generated: '2026-09-26' - target: $.paths['/stayRecords/{stayRecordId}'].put update: x-apievangelist-phrasing: intent: Edit an orphan stay record effect: write questions: - How do I fix an orphan stay record that isn't linked to a profile? - Can I edit the fields on an orphaned stay? instructions: - text: Update orphan stay record {stayRecordId} with {orphanStayRecord}. slots: stayRecordId: path.stayRecordId orphanStayRecord: requestBody.orphanStayRecord - text: Edit orphan stay {stayRecordId}. slots: stayRecordId: path.stayRecordId method: generated generated: '2026-09-26' - target: $.paths['/suspendedAddresses'].get update: x-apievangelist-phrasing: intent: List suspended profile addresses effect: read questions: - Which suspended profiles have addresses that need review? - Can I filter suspended addresses by country or match code? instructions: - text: List suspended addresses for name {name}. slots: name: query.name - text: Show suspended addresses in country {countryCode} at hotel {hotelId}. slots: countryCode: query.countryCode hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/errorsSummary'].get update: x-apievangelist-phrasing: intent: Summarize suspended profile errors effect: read questions: - What errors are causing profiles to be suspended? - Can I get an error summary for suspended profiles by insert date? instructions: - text: Summarize suspended profile errors for hotels {hotelIds}. slots: hotelIds: query.hotelIds - text: Show the suspended profile error summary for {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/errorsSummary/profileType'].get update: x-apievangelist-phrasing: intent: Summarize suspended profile errors by profile type effect: read questions: - Which profile types have the most suspended-profile errors? - Can I break down suspension errors by guest versus company profiles? instructions: - text: Group suspended profile errors by profile type. - text: Show suspended profile errors by profile type for {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/errorsSummary/property'].get update: x-apievangelist-phrasing: intent: Count suspended profile errors per property effect: read questions: - How many suspended-profile errors does each property have? - Which hotel has the most profile match errors? instructions: - text: Count suspended profile errors per property. - text: Show error counts by property for profiles inserted on {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/errorsSummary/property'].post update: x-apievangelist-phrasing: intent: Count one suspended profile error per property effect: read questions: - For one specific error message, how often does it occur at each property? - Can I see where a particular suspension error shows up across hotels? instructions: - text: Show how often error {errorDesc} occurs at each property. slots: errorDesc: requestBody.errorDesc - text: Break down the suspension error {errorDesc} by hotel. slots: errorDesc: requestBody.errorDesc method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats'].get update: x-apievangelist-phrasing: intent: Get suspended profile match statistics effect: read questions: - What are the overall match statistics for suspended profiles? - Can I get match stats for a date range and profile type? instructions: - text: Show suspended profile match stats from {insertDateFrom} to {insertDateTo}. slots: insertDateFrom: query.insertDateFrom insertDateTo: query.insertDateTo - text: Get match statistics for {profileType} suspended profiles at hotel {hotelId}. slots: profileType: query.profileType hotelId: query.hotelId method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats/matchCriteria'].get update: x-apievangelist-phrasing: intent: Get suspended profile match stats by criteria effect: read questions: - Which match criteria are catching the most suspended profiles? - Can I break down suspended profile matches by the rule that matched them? instructions: - text: Group suspended profile match stats by match criteria. - text: Show match statistics per matching rule for suspended profiles at hotel {hotelId}. slots: hotelId: header.x-hotelid method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats/profileType'].get update: x-apievangelist-phrasing: intent: Get suspended profile match stats by profile type effect: read questions: - How do suspended profile match numbers differ between profile types? - Can I see match statistics split by guest, company and agent profiles? instructions: - text: Group suspended profile match stats by profile type. - text: Show match statistics by profile type for {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats/property'].get update: x-apievangelist-phrasing: intent: Get suspended profile match stats by property effect: read questions: - Which properties have the most suspended profile matches? - Can I compare match statistics hotel by hotel? instructions: - text: Group suspended profile match stats by property. - text: Show per-hotel match statistics for {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats/propertyAndProfileType'].get update: x-apievangelist-phrasing: intent: Get match stats by property and profile type effect: read questions: - How are suspended profile matches split across each hotel and profile type combined? - Can I see a property-by-profile-type matrix of match stats? instructions: - text: Group suspended profile match stats by property and profile type. - text: Show the property and profile type match breakdown for {insertDate}. slots: insertDate: query.insertDate method: generated generated: '2026-09-26' - target: $.paths['/suspendedProfiles/matchStats/threshold'].get update: x-apievangelist-phrasing: intent: Get suspended profile match stats by threshold effect: read questions: - How many suspended profiles fall above or below the match threshold in a region? - Can I filter match statistics by region, profile type and threshold? instructions: - text: Show {threshold} threshold match stats for {profileType} profiles in region {regionCode}. slots: threshold: query.threshold profileType: query.profileType regionCode: query.regionCode - text: Get match statistics in region {regionCode} for {profileType} at threshold {threshold}. slots: regionCode: query.regionCode profileType: query.profileType threshold: query.threshold method: generated generated: '2026-09-26' - target: $.paths['/synchronizeProfileSubscriptions'].put update: x-apievangelist-phrasing: intent: Synchronize profile subscriptions effect: write questions: - How do I resync a profile's subscriptions with external systems? - Can I force profile subscriptions to synchronize? instructions: - text: Synchronize profile subscriptions using {criteria}. slots: criteria: requestBody.criteria - text: Resync the subscriptions for these profiles. method: generated generated: '2026-09-26' - target: $.paths['/validateForgetProfiles'].put update: x-apievangelist-phrasing: intent: Check if profiles can be forgotten effect: read questions: - Before anonymizing guests, can I validate whether their profiles are eligible to be forgotten? - Is there a dry-run check for a forget-me request? instructions: - text: 'Validate whether these profiles can be forgotten: {validateForgetProfilesCriteria}.' slots: validateForgetProfilesCriteria: requestBody.validateForgetProfilesCriteria - text: Check forget eligibility for the listed profiles. method: generated generated: '2026-09-26'