# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for OPERA Cloud Activity API version: 1.0.0 extends: openapi/oracle-hospitality-activity-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: 23 - target: $.paths['/activities'].get update: x-apievangelist-phrasing: intent: Search activities across several hotels effect: read questions: - What sales activities are open across all the hotels in my portfolio? - Can I pull activities for several properties at once, filtered by owner or date? instructions: - text: List activities across hotels {hotelIds} from {startDate} to {endDate}. slots: hotelIds: query.hotelIds startDate: query.startDate endDate: query.endDate - text: Show high-priority activities owned by {ownerCode} across all my hotels. slots: ownerCode: query.ownerCode method: generated generated: '2026-09-26' - target: $.paths['/activities'].put update: x-apievangelist-phrasing: intent: Bulk update many activities at once effect: write questions: - Can I update a batch of activities in one request instead of one by one? - Is there a bulk edit for sales activities? instructions: - text: Apply bulk update {activitiesBulkUpdate} to the activities I list. slots: activitiesBulkUpdate: requestBody.activitiesBulkUpdate - text: Bulk-edit all the selected activities with the same changes. method: generated generated: '2026-09-26' - target: $.paths['/activities'].delete update: x-apievangelist-phrasing: intent: Delete several activities by their IDs effect: destructive questions: - Can I delete a whole list of activities in one call? - What do I need to remove several activities together? instructions: - text: Delete activities {activityIds}. slots: activityIds: query.activityIds - text: Remove every activity in the ID list {activityIds} in one go. slots: activityIds: query.activityIds method: generated generated: '2026-09-26' - target: $.paths['/activities/activitiesCompletion'].post update: x-apievangelist-phrasing: intent: Mark several activities as completed effect: write questions: - How do I close out a batch of finished activities in one request? - Can completing activities also update the linked activities? instructions: - text: Mark the activities in {activitiesInformation} as completed. slots: activitiesInformation: requestBody.activitiesInformation - text: Complete all the activities I list and update their linked activities too. method: generated generated: '2026-09-26' - target: $.paths['/activities/emails'].get update: x-apievangelist-phrasing: intent: Retrieve stored emails for accounts and contacts effect: read questions: - Which emails from our external mail system are stored against a sales account in OPERA? - Can I fetch emails linked to a particular contact with a simple GET? instructions: - text: Get stored emails for account {accountIdId}. slots: accountIdId: query.accountIdId - text: List emails filed against contact {contactIdId}. slots: contactIdId: query.contactIdId method: generated generated: '2026-09-26' - target: $.paths['/activities/emails/searches'].post update: x-apievangelist-phrasing: intent: Search stored emails by posting search criteria effect: read questions: - Is there a POST search for stored emails when my criteria are too long for a query string? - Can I submit an email search in a request body and page through results? instructions: - text: Run an email search in the request body for account {accountIdId}. slots: accountIdId: requestBody.accountIdId - text: Search stored emails via POST for contact {contactIdId}, {limit} at a time. slots: contactIdId: requestBody.contactIdId limit: requestBody.limit method: generated generated: '2026-09-26' - target: $.paths['/activities/{activityId}'].get update: x-apievangelist-phrasing: intent: Get an activity by ID without naming a hotel effect: read questions: - Can I look up an activity by its OPERA ID when I don't know which hotel it belongs to? - What does a single activity record contain if I fetch it by ID alone? instructions: - text: Get activity {activityId} without specifying a hotel. slots: activityId: path.activityId - text: Fetch activity {activityId} by its OPERA ID only. slots: activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/activities/{activityId}'].delete update: x-apievangelist-phrasing: intent: Delete an activity by ID without naming a hotel effect: destructive questions: - Can I mark an activity deleted using only its ID, no hotel code? - What's needed to delete an activity when the hotel isn't known? instructions: - text: Delete activity {activityId} without a hotel ID. slots: activityId: path.activityId - text: Mark activity {activityId} as deleted using its OPERA ID alone. slots: activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/activities/{activityId}/attachments/{attachmentId}'].delete update: x-apievangelist-phrasing: intent: Delete an activity attachment without a hotel ID effect: destructive questions: - Can I remove a file attached to an activity without giving the hotel? - What IDs do I need to delete an activity attachment by ID alone? instructions: - text: Delete attachment {attachmentId} from activity {activityId}, no hotel needed. slots: attachmentId: path.attachmentId activityId: path.activityId - text: Remove file {attachmentId} on activity {activityId} using IDs only. slots: attachmentId: path.attachmentId activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities'].get update: x-apievangelist-phrasing: intent: List activities for one hotel effect: read questions: - What activities are on the books for a single property? - Can I see only incomplete activities of a certain type at my hotel? instructions: - text: List activities at hotel {hotelId}. slots: hotelId: path.hotelId - text: Show activities of type {activityType} at {hotelId} between {startDate} and {endDate}. slots: activityType: query.activityType hotelId: path.hotelId startDate: query.startDate endDate: query.endDate method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities'].post update: x-apievangelist-phrasing: intent: Create a new activity at a hotel effect: write questions: - How do I log a sales appointment or to-do for a hotel in OPERA? - Which activity types, like appointments or TODOs, can I create for a property? instructions: - text: Create a new activity at hotel {hotelId}. slots: hotelId: path.hotelId - text: Add activity {activitiesInformation} to hotel {hotelId}. slots: activitiesInformation: requestBody.activitiesInformation hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/statistics'].get update: x-apievangelist-phrasing: intent: Get activity statistics for a hotel effect: read questions: - How many activities has each salesperson logged? - Can I get activity counts by type starting from a report date? instructions: - text: Get activity statistics for hotel {hotelId} from {reportStartDate}. slots: hotelId: path.hotelId reportStartDate: query.reportStartDate - text: Show activity stats at {hotelId} for owners {ownerCodeList}. slots: hotelId: path.hotelId ownerCodeList: query.ownerCodeList method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}'].get update: x-apievangelist-phrasing: intent: Get one activity at a specific hotel effect: read questions: - What are the details of a specific activity at my hotel? - Can I read an activity by ID scoped to a given property? instructions: - text: Get activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Show the details of hotel {hotelId}'s activity {activityId}. slots: hotelId: path.hotelId activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}'].put update: x-apievangelist-phrasing: intent: Update an activity at a hotel effect: write questions: - How do I change the date or notes on an existing activity? - Can updating an activity also change its linked activities? instructions: - text: Update activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Change activity {activityId}'s details to {activitiesInformation}. slots: activityId: path.activityId activitiesInformation: requestBody.activitiesInformation method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}'].delete update: x-apievangelist-phrasing: intent: Delete an activity at a specific hotel effect: destructive questions: - How do I delete an activity from a particular hotel? - Is a deleted activity at a property only marked deleted rather than purged? instructions: - text: Delete activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Mark hotel {hotelId}'s activity {activityId} as deleted. slots: hotelId: path.hotelId activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}/activityCompletion'].post update: x-apievangelist-phrasing: intent: Mark one activity as completed effect: write questions: - How do I mark a single appointment as done? - Can I complete just one activity at a hotel by its ID? instructions: - text: Complete activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Mark activity {activityId} as finished. slots: activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}/attachments'].get update: x-apievangelist-phrasing: intent: List attachments on an activity effect: read questions: - What files are attached to this activity? - Can I find an activity attachment by its file name? instructions: - text: List attachments on activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Find the attachment named {attachedFileName} on activity {activityId}. slots: attachedFileName: query.attachedFileName activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}/attachments/{attachmentId}'].delete update: x-apievangelist-phrasing: intent: Delete an attachment from an activity at a hotel effect: destructive questions: - How do I remove a wrong file from an activity at my hotel? - Can I delete an activity attachment scoped to a property? instructions: - text: Delete attachment {attachmentId} from activity {activityId} at hotel {hotelId}. slots: attachmentId: path.attachmentId activityId: path.activityId hotelId: path.hotelId - text: Remove file {attachmentId} from hotel {hotelId}'s activity {activityId}. slots: attachmentId: path.attachmentId hotelId: path.hotelId activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activities/{activityId}/linkedActivities'].post update: x-apievangelist-phrasing: intent: Invite other owners to an activity effect: write questions: - How do I invite a colleague to an appointment I own? - Can one activity be shared with multiple owners? instructions: - text: Invite additional owners to activity {activityId} at hotel {hotelId}. slots: activityId: path.activityId hotelId: path.hotelId - text: Create linked activities {linkedActivityDetails} for activity {activityId}. slots: linkedActivityDetails: requestBody.linkedActivityDetails activityId: path.activityId method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/activityLog'].get update: x-apievangelist-phrasing: intent: View the change log for activities effect: read questions: - Who changed this activity and when? - Can I see the activity change history for a date range or by user? instructions: - text: Show the activity change log at hotel {hotelId} from {fromDate} to {toDate}. slots: hotelId: path.hotelId fromDate: query.fromDate toDate: query.toDate - text: Get log entries for activity type {activityType} changed by user {userByIdUserIds}. slots: activityType: query.activityType userByIdUserIds: query.userByIdUserIds method: generated generated: '2026-09-26' - target: $.paths['/hotels/{hotelId}/recentlyAccessedActivities'].get update: x-apievangelist-phrasing: intent: List recently opened activities at a hotel effect: read questions: - Which activities did I open recently at this property? - Can I get a quick list of recently viewed activities for one hotel? instructions: - text: Show recently accessed activities at hotel {hotelId}. slots: hotelId: path.hotelId - text: List the activities I recently opened for {hotelId}. slots: hotelId: path.hotelId method: generated generated: '2026-09-26' - target: $.paths['/recentlyAccessedActivities'].get update: x-apievangelist-phrasing: intent: List recently opened activities across hotels effect: read questions: - What activities have I looked at recently, regardless of hotel? - Is there a recent-activities list that doesn't need a hotel ID? instructions: - text: Show my recently accessed activities across all hotels. - text: List recently viewed activities without a hotel path, logged in at {hotelid}. slots: hotelid: header.x-hotelid method: generated generated: '2026-09-26' - target: $.paths['/services/activity/status'].get update: x-apievangelist-phrasing: intent: Check the activity service health effect: read questions: - Is the OPERA activity service currently up? - How can I health-check the activity API? instructions: - text: Ping the activity service. - text: Check activity API health for hotel {hotelid}. slots: hotelid: header.x-hotelid method: generated generated: '2026-09-26'