// Copyright 2026 Google LLC // // 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 google.maps.places.v1; import "google/api/resource.proto"; import "google/geo/type/viewport.proto"; import "google/maps/places/v1/address_descriptor.proto"; import "google/maps/places/v1/content_block.proto"; import "google/maps/places/v1/ev_charging.proto"; import "google/maps/places/v1/fuel_options.proto"; import "google/maps/places/v1/photo.proto"; import "google/maps/places/v1/price_range.proto"; import "google/maps/places/v1/review.proto"; import "google/maps/places/v1/transit.proto"; import "google/protobuf/timestamp.proto"; import "google/type/date.proto"; import "google/type/datetime.proto"; import "google/type/latlng.proto"; import "google/type/localized_text.proto"; import "google/type/postal_address.proto"; option csharp_namespace = "Google.Maps.Places.V1"; option go_package = "cloud.google.com/go/maps/places/apiv1/placespb;placespb"; option java_multiple_files = true; option java_outer_classname = "PlaceProto"; option java_package = "com.google.maps.places.v1"; option objc_class_prefix = "GMPSV1"; option php_namespace = "Google\\Maps\\Places\\V1"; // All the information representing a Place. message Place { option (google.api.resource) = { type: "places.googleapis.com/Place" pattern: "places/{place_id}" plural: "places" singular: "place" }; // The structured components that form the formatted address, if this // information is available. message AddressComponent { // The full text description or name of the address component. For example, // an address component for the country Australia may have a long_name of // "Australia". string long_text = 1; // An abbreviated textual name for the address component, if available. For // example, an address component for the country of Australia may have a // short_name of "AU". string short_text = 2; // An array indicating the type(s) of the address component. repeated string types = 3; // The language used to format this components, in CLDR notation. string language_code = 4; } // Plus code (http://plus.codes) is a location reference with two formats: // global code defining a 14mx14m (1/8000th of a degree) or smaller rectangle, // and compound code, replacing the prefix with a reference location. message PlusCode { // Place's global (full) code, such as "9FWM33GV+HQ", representing an // 1/8000 by 1/8000 degree area (~14 by 14 meters). string global_code = 1; // Place's compound code, such as "33GV+HQ, Ramberg, Norway", containing // the suffix of the global code and replacing the prefix with a formatted // name of a reference entity. string compound_code = 2; } // Information about business hour of the place. message OpeningHours { // A period the place remains in open_now status. message Period { // Status changing points. message Point { // A day of the week, as an integer in the range 0-6. 0 is Sunday, 1 is // Monday, etc. optional int32 day = 1; // The hour in 24 hour format. Ranges from 0 to 23. optional int32 hour = 2; // The minute. Ranges from 0 to 59. optional int32 minute = 3; // Date in the local timezone for the place. google.type.Date date = 6; // Whether or not this endpoint was truncated. Truncation occurs when // the real hours are outside the times we are willing to return hours // between, so we truncate the hours back to these boundaries. This // ensures that at most 24 * 7 hours from midnight of the day of the // request are returned. bool truncated = 5; } // The time that the place starts to be open. Point open = 1; // The time that the place starts to be closed. Point close = 2; } // A type used to identify the type of secondary hours. enum SecondaryHoursType { // Default value when secondary hour type is not specified. SECONDARY_HOURS_TYPE_UNSPECIFIED = 0; // The drive-through hour for banks, restaurants, or pharmacies. DRIVE_THROUGH = 1; // The happy hour. HAPPY_HOUR = 2; // The delivery hour. DELIVERY = 3; // The takeout hour. TAKEOUT = 4; // The kitchen hour. KITCHEN = 5; // The breakfast hour. BREAKFAST = 6; // The lunch hour. LUNCH = 7; // The dinner hour. DINNER = 8; // The brunch hour. BRUNCH = 9; // The pickup hour. PICKUP = 10; // The access hours for storage places. ACCESS = 11; // The special hours for seniors. SENIOR_HOURS = 12; // The online service hours. ONLINE_SERVICE_HOURS = 13; } // Structured information for special days that fall within the period that // the returned opening hours cover. Special days are days that could impact // the business hours of a place, e.g. Christmas day. message SpecialDay { // The date of this special day. google.type.Date date = 1; } // Whether the opening hours period is currently active. For regular opening // hours and current opening hours, this field means whether the place is // open. For secondary opening hours and current secondary opening hours, // this field means whether the secondary hours of this place is active. optional bool open_now = 1; // The periods that this place is open during the week. The periods are in // chronological order, in the place-local timezone. An empty (but not // absent) value indicates a place that is never open, e.g. // because it is closed temporarily for renovations. // // The starting day of `periods` is NOT fixed and should not be assumed to // be Sunday. The API determines the start day based on a variety of // factors. For example, for a 24/7 business, the first period may begin on // the day of the request. For other businesses, it might be the first day // of the week that they are open. // // NOTE: The ordering of the `periods` array is independent of the ordering // of the `weekday_descriptions` array. Do not assume they will begin on the // same day. repeated Period periods = 2; // Localized strings describing the opening hours of this place, one string // for each day of the week. // // NOTE: The order of the days and the start of the week is determined by // the locale (language and region). The ordering of the `periods` array is // independent of the ordering of the `weekday_descriptions` array. Do not // assume they will begin on the same day. // // Will be empty if the hours are unknown or could not be converted to // localized text. Example: "Sun: 18:00–06:00" repeated string weekday_descriptions = 3; // A type string used to identify the type of secondary hours. SecondaryHoursType secondary_hours_type = 4; // Structured information for special days that fall within the period that // the returned opening hours cover. Special days are days that could impact // the business hours of a place, e.g. Christmas day. Set for // current_opening_hours and current_secondary_opening_hours if there are // exceptional hours. repeated SpecialDay special_days = 5; // The next time the current opening hours period starts up to 7 days in the // future. This field is only populated if the opening hours period is not // active at the time of serving the request. google.protobuf.Timestamp next_open_time = 6; // The next time the current opening hours period ends up to 7 days in the // future. This field is only populated if the opening hours period is // active at the time of serving the request. google.protobuf.Timestamp next_close_time = 7; } // Business status for the place. enum BusinessStatus { // Default value. This value is unused. BUSINESS_STATUS_UNSPECIFIED = 0; // The establishment is operational, not necessarily open now. OPERATIONAL = 1; // The establishment is temporarily closed. CLOSED_TEMPORARILY = 2; // The establishment is permanently closed. CLOSED_PERMANENTLY = 3; // The establishment will open in the future. FUTURE_OPENING = 4; } // Information about data providers of this place. message Attribution { // Name of the Place's data provider. string provider = 1; // URI to the Place's data provider. string provider_uri = 2; } // Payment options the place accepts. message PaymentOptions { // Place accepts credit cards as payment. optional bool accepts_credit_cards = 1; // Place accepts debit cards as payment. optional bool accepts_debit_cards = 2; // Place accepts cash only as payment. Places with this attribute may still // accept other payment methods. optional bool accepts_cash_only = 3; // Place accepts NFC payments. optional bool accepts_nfc = 4; } // Information about parking options for the place. A parking lot could // support more than one option at the same time. message ParkingOptions { // Place offers free parking lots. optional bool free_parking_lot = 1; // Place offers paid parking lots. optional bool paid_parking_lot = 2; // Place offers free street parking. optional bool free_street_parking = 3; // Place offers paid street parking. optional bool paid_street_parking = 4; // Place offers valet parking. optional bool valet_parking = 5; // Place offers free garage parking. optional bool free_garage_parking = 6; // Place offers paid garage parking. optional bool paid_garage_parking = 7; } // Sub-destinations are specific places associated with a main place. These // provide more specific destinations for users who are searching within a // large or complex place, like an airport, national park, university, or // stadium. For example, sub-destinations at an airport might include // associated terminals and parking lots. Sub-destinations return the place ID // and place resource name, which can be used in subsequent Place Details // (New) requests to fetch richer details, including the sub-destination's // display name and location. message SubDestination { // The resource name of the sub-destination. string name = 1 [ (google.api.resource_reference) = { type: "places.googleapis.com/Place" } ]; // The place id of the sub-destination. string id = 2; } // Information about the accessibility options a place offers. message AccessibilityOptions { // Place offers wheelchair accessible parking. optional bool wheelchair_accessible_parking = 1; // Places has wheelchair accessible entrance. optional bool wheelchair_accessible_entrance = 2; // Place has wheelchair accessible restroom. optional bool wheelchair_accessible_restroom = 3; // Place has wheelchair accessible seating. optional bool wheelchair_accessible_seating = 4; } // AI-generated summary of the place. message GenerativeSummary { // The overview of the place. google.type.LocalizedText overview = 1; // A link where users can flag a problem with the overview summary. string overview_flag_content_uri = 4; // The AI disclosure message "Summarized with Gemini" // (and its localized variants). This will be in the language specified in // the request if available. google.type.LocalizedText disclosure_text = 6; } // Info about the place in which this place is located. message ContainingPlace { // The resource name of the place in which this place is located. string name = 1 [ (google.api.resource_reference) = { type: "places.googleapis.com/Place" } ]; // The place id of the place in which this place is located. string id = 2; } // Links to trigger different Google Maps actions. message GoogleMapsLinks { // A link to show the directions to the place. The link only populates the // destination location and uses the default travel mode `DRIVE`. string directions_uri = 1; // A link to show this place. string place_uri = 2; // A link to write a review for this place on Google Maps. string write_a_review_uri = 3; // A link to show reviews of this place on Google Maps. string reviews_uri = 4; // A link to show photos of this place on Google Maps. string photos_uri = 5; } // AI-generated summary of the place using user reviews. message ReviewSummary { // The summary of user reviews. google.type.LocalizedText text = 1; // A link where users can flag a problem with the summary. string flag_content_uri = 2; // The AI disclosure message "Summarized with Gemini" // (and its localized variants). This will be in the language specified in // the request if available. google.type.LocalizedText disclosure_text = 3; // A link to show reviews of this place on Google Maps. string reviews_uri = 4; } // The summary of amenities near the EV charging station. This only applies to // places with type `electric_vehicle_charging_station`. The `overview` field // is guaranteed to be provided while the other fields are optional. message EvChargeAmenitySummary { // An overview of the available amenities. This is guaranteed to be // provided. ContentBlock overview = 1; // A summary of the nearby coffee options. ContentBlock coffee = 2; // A summary of the nearby restaurants. ContentBlock restaurant = 3; // A summary of the nearby stores. ContentBlock store = 4; // A link where users can flag a problem with the summary. string flag_content_uri = 5; // The AI disclosure message "Summarized with Gemini" // (and its localized variants). This will be in the language specified in // the request if available. google.type.LocalizedText disclosure_text = 6; } // A summary of points of interest near the place. message NeighborhoodSummary { // An overview summary of the neighborhood. ContentBlock overview = 1; // A detailed description of the neighborhood. ContentBlock description = 2; // A link where users can flag a problem with the summary. string flag_content_uri = 3; // The AI disclosure message "Summarized with Gemini" // (and its localized variants). This will be in the language specified in // the request if available. google.type.LocalizedText disclosure_text = 4; } // The consumer alert message for the place when we detect suspicious review // activity on a business or a business violates our policies. message ConsumerAlert { // The details of the consumer alert message. message Details { // The link to show together with the description to provide more // information. message Link { // The title to show for the link. string title = 1; // The uri of the link. string uri = 2; } // The title to show together with the description. string title = 1; // The description of the consumer alert message. string description = 2; // The link to show together with the description to provide more // information. Link about_link = 3; } // The overview of the consumer alert message. string overview = 1; // The details of the consumer alert message. Details details = 2; // The language code of the consumer alert message. This is a BCP 47 // language code. string language_code = 3; } // This Place's resource name, in `places/{place_id}` format. Can be used to // look up the Place. string name = 1; // The unique identifier of a place. string id = 2; // The localized name of the place, suitable as a short human-readable // description. For example, "Google Sydney", "Starbucks", "Pyrmont", etc. google.type.LocalizedText display_name = 31; // A set of type tags for this result. For example, "political" and // "locality". For the complete list of possible values, see Table A and Table // B at // https://developers.google.com/maps/documentation/places/web-service/place-types repeated string types = 5; // The primary type of the given result. This type must be one of the Places // API supported types. For example, "restaurant", "cafe", "airport", etc. A // place can only have a single primary type. For the complete list of // possible values, see Table A and Table B at // https://developers.google.com/maps/documentation/places/web-service/place-types. // The primary type may be missing if the place's primary type is not a // supported type. When a primary type is present, it is always one of the // types in the `types` field. string primary_type = 50; // The display name of the primary type, localized to the request language if // applicable. For the complete list of possible values, see Table A and Table // B at // https://developers.google.com/maps/documentation/places/web-service/place-types. // The primary type may be missing if the place's primary type is not a // supported type. google.type.LocalizedText primary_type_display_name = 32; // The type label of the place on Google Maps, localized to the request // language if applicable, for example, "Restaurant", "Cafe", "Airport", etc. // The type label may be different from the primary type display name and may // not be a supported type in [Places API Place Types // table](https://developers.google.com/maps/documentation/places/web-service/place-types). google.type.LocalizedText google_maps_type_label = 96; // A human-readable phone number for the place, in national format. string national_phone_number = 7; // A human-readable phone number for the place, in international format. string international_phone_number = 8; // A full, human-readable address for this place. string formatted_address = 9; // A short, human-readable address for this place. string short_formatted_address = 51; // The address in postal address format. google.type.PostalAddress postal_address = 90; // Repeated components for each locality level. // Note the following facts about the address_components[] array: // - The array of address components may contain more components than the // formatted_address. // - The array does not necessarily include all the political entities that // contain an address, apart from those included in the formatted_address. To // retrieve all the political entities that contain a specific address, you // should use reverse geocoding, passing the latitude/longitude of the address // as a parameter to the request. // - The format of the response is not guaranteed to remain the same between // requests. In particular, the number of address_components varies based on // the address requested and can change over time for the same address. A // component can change position in the array. The type of the component can // change. A particular component may be missing in a later response. repeated AddressComponent address_components = 10; // Plus code of the place location lat/long. PlusCode plus_code = 11; // The position of this place. google.type.LatLng location = 12; // A viewport suitable for displaying the place on an average-sized map. This // viewport should not be used as the physical boundary or the service area of // the business. google.geo.type.Viewport viewport = 13; // A rating between 1.0 and 5.0, based on user reviews of this place. double rating = 14; // A URL providing more information about this place. string google_maps_uri = 15; // The authoritative website for this place, e.g. a business' homepage. // Note that for places that are part of a chain (e.g. an IKEA store), this // will usually be the website for the individual store, not the overall // chain. string website_uri = 16; // List of reviews about this place, sorted by relevance. A maximum of 5 // reviews can be returned. repeated Review reviews = 53; // The regular hours of operation. Note that if a place is always open (24 // hours), the `close` field will not be set. Clients can rely on always open // (24 hours) being represented as an // [`open`](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places#Period) // period containing // [`day`](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places#Point) // with value `0`, // [`hour`](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places#Point) // with value `0`, and // [`minute`](https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places#Point) // with value `0`. OpeningHours regular_opening_hours = 21; // Number of minutes this place's timezone is currently offset from UTC. // This is expressed in minutes to support timezones that are offset by // fractions of an hour, e.g. X hours and 15 minutes. optional int32 utc_offset_minutes = 22; // IANA Time Zone Database time zone. For example "America/New_York". google.type.TimeZone time_zone = 88; // Information (including references) about photos of this place. A maximum of // 10 photos can be returned. repeated Photo photos = 54; // The place's address in adr microformat: http://microformats.org/wiki/adr. string adr_format_address = 24; // The business status for the place. BusinessStatus business_status = 25; // The date this place will open in the future. This field is only // populated if the business status is FUTURE_OPENING. google.type.Date opening_date = 95; // Price level of the place. PriceLevel price_level = 26; // A set of data provider that must be shown with this result. repeated Attribution attributions = 27; // The total number of reviews (with or without text) for this place. optional int32 user_rating_count = 28; // A truncated URL to an icon mask. User can access different icon type by // appending type suffix to the end (eg, ".svg" or ".png"). string icon_mask_base_uri = 29; // Background color for icon_mask in hex format, e.g. #909CE1. string icon_background_color = 30; // Specifies if the business supports takeout. optional bool takeout = 33; // Specifies if the business supports delivery. optional bool delivery = 34; // Specifies if the business supports indoor or outdoor seating options. optional bool dine_in = 35; // Specifies if the business supports curbside pickup. optional bool curbside_pickup = 36; // Specifies if the place supports reservations. optional bool reservable = 38; // Specifies if the place serves breakfast. optional bool serves_breakfast = 39; // Specifies if the place serves lunch. optional bool serves_lunch = 40; // Specifies if the place serves dinner. optional bool serves_dinner = 41; // Specifies if the place serves beer. optional bool serves_beer = 42; // Specifies if the place serves wine. optional bool serves_wine = 43; // Specifies if the place serves brunch. optional bool serves_brunch = 44; // Specifies if the place serves vegetarian food. optional bool serves_vegetarian_food = 45; // The hours of operation for the next seven days (including today). The time // period starts at midnight on the date of the request and ends at 11:59 pm // six days later. This field includes the special_days subfield of all hours, // set for dates that have exceptional hours. OpeningHours current_opening_hours = 46; // Contains an array of entries for the next seven days including information // about secondary hours of a business. Secondary hours are different from a // business's main hours. For example, a restaurant can specify drive through // hours or delivery hours as its secondary hours. This field populates the // type subfield, which draws from a predefined list of opening hours types // (such as DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the // place. This field includes the special_days subfield of all hours, set for // dates that have exceptional hours. repeated OpeningHours current_secondary_opening_hours = 47; // Contains an array of entries for information about regular secondary hours // of a business. Secondary hours are different from a business's main hours. // For example, a restaurant can specify drive through hours or delivery hours // as its secondary hours. This field populates the type subfield, which draws // from a predefined list of opening hours types (such as DRIVE_THROUGH, // PICKUP, or TAKEOUT) based on the types of the place. repeated OpeningHours regular_secondary_opening_hours = 49; // Contains a summary of the place. A summary is comprised of a textual // overview, and also includes the language code for these if applicable. // Summary text must be presented as-is and can not be modified or altered. google.type.LocalizedText editorial_summary = 52; // Place provides outdoor seating. optional bool outdoor_seating = 55; // Place provides live music. optional bool live_music = 56; // Place has a children's menu. optional bool menu_for_children = 57; // Place serves cocktails. optional bool serves_cocktails = 58; // Place serves dessert. optional bool serves_dessert = 59; // Place serves coffee. optional bool serves_coffee = 60; // Place is good for children. optional bool good_for_children = 62; // Place allows dogs. optional bool allows_dogs = 63; // Place has restroom. optional bool restroom = 64; // Place accommodates groups. optional bool good_for_groups = 65; // Place is suitable for watching sports. optional bool good_for_watching_sports = 66; // Payment options the place accepts. If a payment option data is not // available, the payment option field will be unset. PaymentOptions payment_options = 67; // Options of parking provided by the place. ParkingOptions parking_options = 70; // A list of sub-destinations related to the place. repeated SubDestination sub_destinations = 71; // Information about the accessibility options a place offers. optional AccessibilityOptions accessibility_options = 72; // The most recent information about fuel options in a gas station. This // information is updated regularly. FuelOptions fuel_options = 78; // Information of ev charging options. EVChargeOptions ev_charge_options = 79; // AI-generated summary of the place. GenerativeSummary generative_summary = 80; // List of places in which the current place is located. repeated ContainingPlace containing_places = 82; // Indicates whether the place is a pure service area business. Pure service // area business is a business that visits or delivers to customers directly // but does not serve customers at their business address. For example, // businesses like cleaning services or plumbers. Those businesses may not // have a physical address or location on Google Maps. optional bool pure_service_area_business = 83; // The address descriptor of the place. Address descriptors include additional // information that help describe a location using landmarks and areas. See // address descriptor regional coverage in // https://developers.google.com/maps/documentation/geocoding/address-descriptors/coverage. AddressDescriptor address_descriptor = 84; // Links to trigger different Google Maps actions. GoogleMapsLinks google_maps_links = 85; // The price range associated with a Place. PriceRange price_range = 86; // AI-generated summary of the place using user reviews. ReviewSummary review_summary = 87; // The summary of amenities near the EV charging station. EvChargeAmenitySummary ev_charge_amenity_summary = 89; // A summary of points of interest near the place. NeighborhoodSummary neighborhood_summary = 91; // The consumer alert message for the place when we detect suspicious review // activity on a business or a business violates our policies. ConsumerAlert consumer_alert = 92; // If this Place is permanently closed and has moved to a new Place, this // field contains the new Place's resource name, in `places/{place_id}` // format. If this Place moved multiple times, this field will represent the // first moved place. This field will not be populated if this Place has not // moved. string moved_place = 93 [ (google.api.resource_reference) = { type: "places.googleapis.com/Place" } ]; // If this Place is permanently closed and has moved to a new Place, this // field contains the new Place's place ID. If this Place moved multiple // times, this field will represent the first moved Place. This field will not // be populated if this Place has not moved. string moved_place_id = 94; // The transit station information for the place. TransitStation transit_station = 98; } // Price level of the place. enum PriceLevel { // Place price level is unspecified or unknown. PRICE_LEVEL_UNSPECIFIED = 0; // Place provides free services. PRICE_LEVEL_FREE = 1; // Place provides inexpensive services. PRICE_LEVEL_INEXPENSIVE = 2; // Place provides moderately priced services. PRICE_LEVEL_MODERATE = 3; // Place provides expensive services. PRICE_LEVEL_EXPENSIVE = 4; // Place provides very expensive services. PRICE_LEVEL_VERY_EXPENSIVE = 5; }