// // Copyright 2025 HotelEngine, Inc., d/b/a Engine // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at: // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package engine.shop.lodging.v1; import "protoc-gen-openapiv2/options/annotations.proto"; import "engine/common/v1/amenities.proto"; import "engine/common/v1/conditions.proto"; import "engine/common/v1/price.proto"; import "engine/common/v1/sell_type.proto"; option go_package = "engine.com/engine-partner-api/v1/shop/lodging"; option java_package = "com.engine.shop.v1.lodging"; option java_multiple_files = true; // A summary of the attributes available to a specific Offer. message OfferSummary { option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { json_schema: { title: "Shop_Lodging_OfferSummary_v1" } }; // The Engine identifier for the Property to which this Offer belongs. string property_id = 1; // A textual description of the Offer. string description = 2; // The pricing details for the Offer. // This price indicates the amount owed to Engine at the time of booking. // Refer to [OfferSummary.sell_type] for details on how the offer may be priced to the customer. .engine.common.v1.PriceWithPerUnit price = 3; // Amenities that may only apply to this Offer. // For example, some Offers may include parking. .engine.shop.lodging.v1.OfferAmenities offer_amenities = 4; // The conditions covering refundability and cancellation. .engine.common.v1.Conditions conditions = 5; // If true, this Offer may earn loyalty points. bool is_loyalty_eligible = 6; // If true, this offer requires a loyalty membership id to book. bool is_loyalty_membership_id_required = 7; // Optionally, if this offer represents a negotiated rate specifically configured for your credential, the details of that rate will be included here. .engine.shop.lodging.v1.RateData rate_data = 8; // The sell type for this offer. // Defines how the seller is compensated and the pricing guidelines for this offer. // See [SellType] for details on available model types and their pricing rules. .engine.common.v1.SellType sell_type = 9; } // OfferAmenities represent the value added by the individual offer to be evaluated against other offers. // OfferAmenities do not include amenities conferred by the Property. // For example, if a given Property provides free breakfast to all guests, none of the Offers for that property will have Free Breakfast as an amenity. message OfferAmenities { option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { json_schema: { title: "Shop_Lodging_OfferAmenities_v1" } }; // Describes the availability of free breakfast for the offer or booking. .engine.common.v1.AmenityAvailability free_breakfast = 1; // Describes the availability of free parking for the offer or booking. .engine.common.v1.AmenityAvailability free_parking = 2; // Textual descriptions for display purposes of assorted amenities of the offer or booking that have not been explicitly hoisted to their own attribute. repeated string other_amenities = 9999; } // RateData contains rate information if and only if an Offer corresponds to a rate negotiated and contracted with the calling credential. message RateData { option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { json_schema: { title: "Shop_Lodging_RateData_v1" } }; // The rate code associated with the Offer. // For example, if a Partner has negotiated a rate code of "123", and an Offer corresponds to that rate code, this field will be "123". // Contact Engine to load any rates codes for your credential string rate_code = 1; }