{
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "schemas": {
    "GoogleMapsPlacesV1Circle": {
      "type": "object",
      "description": "Circle with a LatLng as center and radius.",
      "properties": {
        "center": {
          "$ref": "GoogleTypeLatLng",
          "description": "Required. Center latitude and longitude. The range of latitude must be within [-90.0, 90.0]. The range of the longitude must be within [-180.0, 180.0]."
        },
        "radius": {
          "format": "double",
          "description": "Required. Radius measured in meters. The radius must be within [0.0, 50000.0].",
          "type": "number"
        }
      },
      "id": "GoogleMapsPlacesV1Circle"
    },
    "GoogleMapsPlacesV1PlaceEntrance": {
      "id": "GoogleMapsPlacesV1PlaceEntrance",
      "type": "object",
      "properties": {
        "tags": {
          "type": "array",
          "description": "A list of tags that describe the entrance.",
          "items": {
            "type": "string",
            "enum": [
              "TAG_UNSPECIFIED",
              "PREFERRED"
            ],
            "enumDescriptions": [
              "Not used.",
              "The entrance likely provides physical access to the primary place in the returned destination. A place can have multiple preferred entrances. If an entrance does not have this tag, it means the entrance is physically on the same building as the primary place, but does not necessarily provide access to the place. For example, if the primary place is a restaurant in a strip mall, the \"PREFERRED\" entrances will be the ones that likely lead into the restaurant itself, while the other returned entrances will be other entrances for the building, such as entrances into other restaurants in the strip mall. If the primary place is a building itself, the `PREFERRED` entrances will be the ones that lead into the \"main\" part of the building. For example, in a shopping center the `PREFERRED` entrances will be the ones that allow access to the main foyer area, but if an entrance only provides access to a store on the side of the building, it won't be a `PREFERRED` entrance. Note: a `PREFERRED` entrance might not provide access to the primary place, and a non-`PREFERRED` entrance might provide access to the primary place."
            ]
          }
        },
        "location": {
          "$ref": "GoogleTypeLatLng",
          "description": "The location of the entrance."
        }
      },
      "description": "An entrance is a single latitude/longitude coordinate pair that defines the location of an entry and exit point for a place."
    },
    "GoogleMapsPlacesV1AuthorAttribution": {
      "properties": {
        "photoUri": {
          "type": "string",
          "description": "Profile photo URI of the author of the Photo or Review."
        },
        "uri": {
          "description": "URI of the author of the Photo or Review.",
          "type": "string"
        },
        "displayName": {
          "description": "Name of the author of the Photo or Review.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Information about the author of the UGC data. Used in Photo, and Review.",
      "id": "GoogleMapsPlacesV1AuthorAttribution"
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponse": {
      "type": "object",
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponse",
      "description": "Response proto for AutocompletePlaces.",
      "properties": {
        "suggestions": {
          "items": {
            "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestion"
          },
          "type": "array",
          "description": "Contains a list of suggestions, ordered in descending order of relevance."
        }
      }
    },
    "GoogleMapsPlacesV1TransitIcon": {
      "properties": {
        "url": {
          "description": "The URL of the icon.",
          "type": "string"
        },
        "nameIncluded": {
          "description": "Whether the name is contained in the icon and there is no need to display it next to the icon.",
          "type": "boolean"
        }
      },
      "id": "GoogleMapsPlacesV1TransitIcon",
      "description": "Icon for a transit line, vehicle, or agency.",
      "type": "object"
    },
    "GoogleMapsPlacesV1SearchTextRequestLocationRestriction": {
      "id": "GoogleMapsPlacesV1SearchTextRequestLocationRestriction",
      "properties": {
        "rectangle": {
          "$ref": "GoogleGeoTypeViewport",
          "description": "A rectangle box defined by northeast and southwest corner. `rectangle.high()` must be the northeast point of the rectangle viewport. `rectangle.low()` must be the southwest point of the rectangle viewport. `rectangle.low().latitude()` cannot be greater than `rectangle.high().latitude()`. This will result in an empty latitude range. A rectangle viewport cannot be wider than 180 degrees."
        }
      },
      "type": "object",
      "description": "The region to search. This location serves as a restriction which means results outside given location will not be returned."
    },
    "GoogleMapsPlacesV1PlaceAddressComponent": {
      "id": "GoogleMapsPlacesV1PlaceAddressComponent",
      "type": "object",
      "properties": {
        "longText": {
          "description": "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\".",
          "type": "string"
        },
        "shortText": {
          "description": "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\".",
          "type": "string"
        },
        "languageCode": {
          "description": "The language used to format this components, in CLDR notation.",
          "type": "string"
        },
        "types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "An array indicating the type(s) of the address component."
        }
      },
      "description": "The structured components that form the formatted address, if this information is available."
    },
    "GoogleMapsPlacesV1PlaceContainingPlace": {
      "type": "object",
      "id": "GoogleMapsPlacesV1PlaceContainingPlace",
      "description": "Info about the place in which this place is located.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The place id of the place in which this place is located."
        },
        "name": {
          "description": "The resource name of the place in which this place is located.",
          "type": "string"
        }
      }
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStringRange": {
      "type": "object",
      "properties": {
        "endOffset": {
          "description": "Zero-based offset of the last Unicode character (exclusive).",
          "type": "integer",
          "format": "int32"
        },
        "startOffset": {
          "format": "int32",
          "description": "Zero-based offset of the first Unicode character of the string (inclusive).",
          "type": "integer"
        }
      },
      "description": "Identifies a substring within a given text.",
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStringRange"
    },
    "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedText": {
      "id": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedText",
      "properties": {
        "highlightedTextRanges": {
          "description": "The list of the ranges of the highlighted text.",
          "items": {
            "$ref": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedTextHighlightedTextRange"
          },
          "type": "array"
        },
        "text": {
          "type": "string"
        }
      },
      "description": "The text highlighted by the justification. This is a subset of the review itself. The exact word to highlight is marked by the HighlightedTextRange. There could be several words in the text being highlighted.",
      "type": "object"
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStructuredFormat": {
      "properties": {
        "secondaryText": {
          "description": "Represents additional disambiguating features (such as a city or region) to further identify the Place or refine the query.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText"
        },
        "mainText": {
          "description": "Represents the name of the Place or query.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText"
        }
      },
      "description": "Contains a breakdown of a Place or query prediction into main text and secondary text. For Place predictions, the main text contains the specific name of the Place. For query predictions, the main text contains the query. The secondary text contains additional disambiguating features (such as a city or region) to further identify the Place or refine the query.",
      "type": "object",
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStructuredFormat"
    },
    "GoogleTypeMoney": {
      "type": "object",
      "properties": {
        "units": {
          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
          "format": "int64",
          "type": "string"
        },
        "currencyCode": {
          "type": "string",
          "description": "The three-letter currency code defined in ISO 4217."
        },
        "nanos": {
          "format": "int32",
          "type": "integer",
          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000."
        }
      },
      "description": "Represents an amount of money with its currency type.",
      "id": "GoogleTypeMoney"
    },
    "GoogleMapsPlacesV1PlaceEvChargeAmenitySummary": {
      "id": "GoogleMapsPlacesV1PlaceEvChargeAmenitySummary",
      "description": "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.",
      "type": "object",
      "properties": {
        "restaurant": {
          "description": "A summary of the nearby restaurants.",
          "$ref": "GoogleMapsPlacesV1ContentBlock"
        },
        "coffee": {
          "$ref": "GoogleMapsPlacesV1ContentBlock",
          "description": "A summary of the nearby coffee options."
        },
        "flagContentUri": {
          "description": "A link where users can flag a problem with the summary.",
          "type": "string"
        },
        "disclosureText": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The AI disclosure message \"Summarized with Gemini\" (and its localized variants). This will be in the language specified in the request if available."
        },
        "overview": {
          "$ref": "GoogleMapsPlacesV1ContentBlock",
          "description": "An overview of the available amenities. This is guaranteed to be provided."
        },
        "store": {
          "$ref": "GoogleMapsPlacesV1ContentBlock",
          "description": "A summary of the nearby stores."
        }
      }
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText": {
      "description": "Text representing a Place or query prediction. The text may be used as is or formatted.",
      "type": "object",
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText",
      "properties": {
        "text": {
          "type": "string",
          "description": "Text that may be used as is or formatted with `matches`."
        },
        "matches": {
          "description": "A list of string ranges identifying where the input request matched in `text`. The ranges can be used to format specific parts of `text`. The substrings may not be exact matches of `input` if the matching was determined by criteria other than string matching (for example, spell corrections or transliterations). These values are Unicode character offsets of `text`. The ranges are guaranteed to be ordered in increasing offset values.",
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStringRange"
          }
        }
      }
    },
    "GoogleMapsPlacesV1SearchTextRequestLocationBias": {
      "type": "object",
      "description": "The region to search. This location serves as a bias which means results around given location might be returned.",
      "id": "GoogleMapsPlacesV1SearchTextRequestLocationBias",
      "properties": {
        "circle": {
          "description": "A circle defined by center point and radius.",
          "$ref": "GoogleMapsPlacesV1Circle"
        },
        "rectangle": {
          "$ref": "GoogleGeoTypeViewport",
          "description": "A rectangle box defined by northeast and southwest corner. `rectangle.high()` must be the northeast point of the rectangle viewport. `rectangle.low()` must be the southwest point of the rectangle viewport. `rectangle.low().latitude()` cannot be greater than `rectangle.high().latitude()`. This will result in an empty latitude range. A rectangle viewport cannot be wider than 180 degrees."
        }
      }
    },
    "GoogleMapsPlacesV1PlaceNeighborhoodSummary": {
      "properties": {
        "overview": {
          "$ref": "GoogleMapsPlacesV1ContentBlock",
          "description": "An overview summary of the neighborhood."
        },
        "disclosureText": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The AI disclosure message \"Summarized with Gemini\" (and its localized variants). This will be in the language specified in the request if available."
        },
        "description": {
          "$ref": "GoogleMapsPlacesV1ContentBlock",
          "description": "A detailed description of the neighborhood."
        },
        "flagContentUri": {
          "description": "A link where users can flag a problem with the summary.",
          "type": "string"
        }
      },
      "id": "GoogleMapsPlacesV1PlaceNeighborhoodSummary",
      "description": "A summary of points of interest near the place.",
      "type": "object"
    },
    "GoogleMapsPlacesV1PhotoMedia": {
      "id": "GoogleMapsPlacesV1PhotoMedia",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The resource name of a photo media in the format: `places/{place_id}/photos/{photo_reference}/media`."
        },
        "photoUri": {
          "description": "A short-lived uri that can be used to render the photo.",
          "type": "string"
        }
      },
      "description": "A photo media from Places API."
    },
    "GoogleMapsPlacesV1PlaceAccessibilityOptions": {
      "properties": {
        "wheelchairAccessibleParking": {
          "type": "boolean",
          "description": "Place offers wheelchair accessible parking."
        },
        "wheelchairAccessibleRestroom": {
          "type": "boolean",
          "description": "Place has wheelchair accessible restroom."
        },
        "wheelchairAccessibleEntrance": {
          "description": "Places has wheelchair accessible entrance.",
          "type": "boolean"
        },
        "wheelchairAccessibleSeating": {
          "type": "boolean",
          "description": "Place has wheelchair accessible seating."
        }
      },
      "id": "GoogleMapsPlacesV1PlaceAccessibilityOptions",
      "description": "Information about the accessibility options a place offers.",
      "type": "object"
    },
    "GoogleMapsPlacesV1PlacePlusCode": {
      "description": "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.",
      "id": "GoogleMapsPlacesV1PlacePlusCode",
      "type": "object",
      "properties": {
        "compoundCode": {
          "type": "string",
          "description": "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."
        },
        "globalCode": {
          "description": "Place's global (full) code, such as \"9FWM33GV+HQ\", representing an 1/8000 by 1/8000 degree area (~14 by 14 meters).",
          "type": "string"
        }
      }
    },
    "GoogleTypeTimeZone": {
      "description": "Represents a time zone from the [IANA Time Zone Database](https://www.iana.org/time-zones).",
      "properties": {
        "version": {
          "description": "Optional. IANA Time Zone Database version number. For example \"2019a\".",
          "type": "string"
        },
        "id": {
          "description": "IANA Time Zone Database time zone. For example \"America/New_York\".",
          "type": "string"
        }
      },
      "type": "object",
      "id": "GoogleTypeTimeZone"
    },
    "GoogleMapsPlacesV1AddressDescriptor": {
      "id": "GoogleMapsPlacesV1AddressDescriptor",
      "description": "A relational description of a location. Includes a ranked set of nearby landmarks and precise containing areas and their relationship to the target location.",
      "properties": {
        "landmarks": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1AddressDescriptorLandmark"
          },
          "description": "A ranked list of nearby landmarks. The most recognizable and nearby landmarks are ranked first."
        },
        "areas": {
          "items": {
            "$ref": "GoogleMapsPlacesV1AddressDescriptorArea"
          },
          "description": "A ranked list of containing or adjacent areas. The most recognizable and precise areas are ranked first.",
          "type": "array"
        }
      },
      "type": "object"
    },
    "GoogleMapsPlacesV1ContentBlock": {
      "id": "GoogleMapsPlacesV1ContentBlock",
      "type": "object",
      "description": "A block of content that can be served individually.",
      "properties": {
        "content": {
          "description": "Content related to the topic.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "referencedPlaces": {
          "items": {
            "type": "string"
          },
          "description": "The list of resource names of the referenced places. This name can be used in other APIs that accept Place resource names.",
          "type": "array"
        }
      }
    },
    "GoogleMapsPlacesV1AutocompletePlacesRequestLocationRestriction": {
      "type": "object",
      "id": "GoogleMapsPlacesV1AutocompletePlacesRequestLocationRestriction",
      "description": "The region to search. The results will be restricted to the specified region.",
      "properties": {
        "circle": {
          "$ref": "GoogleMapsPlacesV1Circle",
          "description": "A circle defined by a center point and radius."
        },
        "rectangle": {
          "$ref": "GoogleGeoTypeViewport",
          "description": "A viewport defined by a northeast and a southwest corner."
        }
      }
    },
    "GoogleMapsPlacesV1PlaceGenerativeSummary": {
      "id": "GoogleMapsPlacesV1PlaceGenerativeSummary",
      "type": "object",
      "properties": {
        "disclosureText": {
          "description": "The AI disclosure message \"Summarized with Gemini\" (and its localized variants). This will be in the language specified in the request if available.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "overview": {
          "description": "The overview of the place.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "overviewFlagContentUri": {
          "description": "A link where users can flag a problem with the overview summary.",
          "type": "string"
        }
      },
      "description": "AI-generated summary of the place."
    },
    "GoogleMapsPlacesV1AutocompletePlacesRequest": {
      "type": "object",
      "id": "GoogleMapsPlacesV1AutocompletePlacesRequest",
      "properties": {
        "input": {
          "description": "Required. The text string on which to search.",
          "type": "string"
        },
        "includedRegionCodes": {
          "type": "array",
          "description": "Optional. Only include results in the specified regions, specified as up to 15 CLDR two-character region codes. An empty set will not restrict the results. If both `location_restriction` and `included_region_codes` are set, the results will be located in the area of intersection.",
          "items": {
            "type": "string"
          }
        },
        "origin": {
          "description": "Optional. The origin point from which to calculate geodesic distance to the destination (returned as `distance_meters`). If this value is omitted, geodesic distance will not be returned.",
          "$ref": "GoogleTypeLatLng"
        },
        "inputOffset": {
          "format": "int32",
          "type": "integer",
          "description": "Optional. A zero-based Unicode character offset of `input` indicating the cursor position in `input`. The cursor position may influence what predictions are returned. If empty, defaults to the length of `input`."
        },
        "includeFutureOpeningBusinesses": {
          "description": "Optional. If true, include businesses that are not yet open but will open in the future.",
          "type": "boolean"
        },
        "locationRestriction": {
          "description": "Optional. Restrict results to a specified location. At most one of `location_bias` or `location_restriction` should be set. If neither are set, the results will be biased by IP address, meaning the IP address will be mapped to an imprecise location and used as a biasing signal.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesRequestLocationRestriction"
        },
        "sessionToken": {
          "type": "string",
          "description": "Optional. A string which identifies an Autocomplete session for billing purposes. Must be a URL and filename safe base64 string with at most 36 ASCII characters in length. Otherwise an INVALID_ARGUMENT error is returned. The session begins when the user starts typing a query, and concludes when they select a place and a call to Place Details or Address Validation is made. Each session can have multiple queries, followed by one Place Details or Address Validation request. The credentials used for each request within a session must belong to the same Google Cloud Console project. Once a session has concluded, the token is no longer valid; your app must generate a fresh token for each session. If the `session_token` parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided (each request is billed separately). We recommend the following guidelines: * Use session tokens for all Place Autocomplete calls. * Generate a fresh token for each session. Using a version 4 UUID is recommended. * Ensure that the credentials used for all Place Autocomplete, Place Details, and Address Validation requests within a session belong to the same Cloud Console project. * Be sure to pass a unique session token for each new session. Using the same token for more than one session will result in each request being billed individually."
        },
        "includedPrimaryTypes": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Optional. Included primary Place type (for example, \"restaurant\" or \"gas_station\") in [Place Types](https://developers.google.com/maps/documentation/places/web-service/place-types), or only `(regions)`, or only `(cities)`. A Place is only returned if its primary type is included in this list. Up to 5 values can be specified. If no types are specified, all Place types are returned."
        },
        "languageCode": {
          "type": "string",
          "description": "Optional. The language in which to return results. Defaults to en-US. The results may be in mixed languages if the language used in `input` is different from `language_code` or if the returned Place does not have a translation from the local language to `language_code`."
        },
        "locationBias": {
          "description": "Optional. Bias results to a specified location. At most one of `location_bias` or `location_restriction` should be set. If neither are set, the results will be biased by IP address, meaning the IP address will be mapped to an imprecise location and used as a biasing signal.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesRequestLocationBias"
        },
        "regionCode": {
          "type": "string",
          "description": "Optional. The region code, specified as a CLDR two-character region code. This affects address formatting, result ranking, and may influence what results are returned. This does not restrict results to the specified region. To restrict results to a region, use `region_code_restriction`."
        },
        "includePureServiceAreaBusinesses": {
          "type": "boolean",
          "description": "Optional. Include pure service area businesses if the field is set to true. 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 do not have a physical address or location on Google Maps. Places will not return fields including `location`, `plus_code`, and other location related fields for these businesses."
        },
        "includeQueryPredictions": {
          "type": "boolean",
          "description": "Optional. If true, the response will include both Place and query predictions. Otherwise the response will only return Place predictions."
        }
      },
      "description": "Request proto for AutocompletePlaces."
    },
    "GoogleMapsPlacesV1SearchNearbyRequestLocationRestriction": {
      "type": "object",
      "id": "GoogleMapsPlacesV1SearchNearbyRequestLocationRestriction",
      "properties": {
        "circle": {
          "description": "A circle defined by center point and radius.",
          "$ref": "GoogleMapsPlacesV1Circle"
        }
      },
      "description": "The region to search."
    },
    "GoogleMapsPlacesV1ContextualContent": {
      "properties": {
        "photos": {
          "type": "array",
          "description": "Information (including references) about photos of this place, contextual to the place query.",
          "items": {
            "$ref": "GoogleMapsPlacesV1Photo"
          }
        },
        "reviews": {
          "items": {
            "$ref": "GoogleMapsPlacesV1Review"
          },
          "description": "List of reviews about this place, contextual to the place query.",
          "type": "array"
        },
        "justifications": {
          "items": {
            "$ref": "GoogleMapsPlacesV1ContextualContentJustification"
          },
          "description": "Justifications for the place.",
          "type": "array"
        }
      },
      "id": "GoogleMapsPlacesV1ContextualContent",
      "type": "object",
      "description": "Content that is contextual to the place query."
    },
    "GoogleMapsPlacesV1ContextualContentJustificationBusinessAvailabilityAttributesJustification": {
      "type": "object",
      "description": "BusinessAvailabilityAttributes justifications. This shows some attributes a business has that could interest an end user.",
      "id": "GoogleMapsPlacesV1ContextualContentJustificationBusinessAvailabilityAttributesJustification",
      "properties": {
        "takeout": {
          "description": "If a place provides takeout.",
          "type": "boolean"
        },
        "delivery": {
          "type": "boolean",
          "description": "If a place provides delivery."
        },
        "dineIn": {
          "description": "If a place provides dine-in.",
          "type": "boolean"
        }
      }
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionPlacePrediction": {
      "properties": {
        "placeId": {
          "description": "The unique identifier of the suggested Place. This identifier can be used in other APIs that accept Place IDs.",
          "type": "string"
        },
        "structuredFormat": {
          "description": "A breakdown of the Place prediction into main text containing the name of the Place and secondary text containing additional disambiguating features (such as a city or region). `structured_format` is recommended for developers who wish to show two separate, but related, UI elements. Developers who wish to show a single UI element may want to use `text` instead. They are two different ways to represent a Place prediction. Users should not try to parse `structured_format` into `text` or vice versa.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStructuredFormat"
        },
        "distanceMeters": {
          "type": "integer",
          "format": "int32",
          "description": "The length of the geodesic in meters from `origin` if `origin` is specified. Certain predictions such as routes may not populate this field."
        },
        "text": {
          "description": "Contains the human-readable name for the returned result. For establishment results, this is usually the business name and address. `text` is recommended for developers who wish to show a single UI element. Developers who wish to show two separate, but related, UI elements may want to use `structured_format` instead. They are two different ways to represent a Place prediction. Users should not try to parse `structured_format` into `text` or vice versa. This text may be different from the `display_name` returned by GetPlace. May be in mixed languages if the request `input` and `language_code` are in different languages or if the Place does not have a translation from the local language to `language_code`.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText"
        },
        "types": {
          "description": "List of types that apply to this Place from Table A or Table B in https://developers.google.com/maps/documentation/places/web-service/place-types. A type is a categorization of a Place. Places with shared types will share similar characteristics.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "place": {
          "type": "string",
          "description": "The resource name of the suggested Place. This name can be used in other APIs that accept Place names."
        }
      },
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionPlacePrediction",
      "description": "Prediction results for a Place Autocomplete prediction.",
      "type": "object"
    },
    "GoogleMapsPlacesV1SearchTextResponse": {
      "id": "GoogleMapsPlacesV1SearchTextResponse",
      "properties": {
        "places": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1Place"
          },
          "description": "A list of places that meet the user's text search criteria."
        },
        "nextPageToken": {
          "type": "string",
          "description": "A token that can be sent as `page_token` to retrieve the next page. If this field is omitted or empty, there are no subsequent pages."
        },
        "searchUri": {
          "type": "string",
          "description": "A link allows the user to search with the same text query as specified in the request on Google Maps."
        },
        "contextualContents": {
          "description": "Experimental: See https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative for more details. A list of contextual contents where each entry associates to the corresponding place in the same index in the places field. The contents that are relevant to the `text_query` in the request are preferred. If the contextual content is not available for one of the places, it will return non-contextual content. It will be empty only when the content is unavailable for this place. This list will have as many entries as the list of places if requested.",
          "items": {
            "$ref": "GoogleMapsPlacesV1ContextualContent"
          },
          "type": "array"
        },
        "routingSummaries": {
          "items": {
            "$ref": "GoogleMapsPlacesV1RoutingSummary"
          },
          "description": "A list of routing summaries where each entry associates to the corresponding place in the same index in the `places` field. If the routing summary is not available for one of the places, it will contain an empty entry. This list will have as many entries as the list of places if requested.",
          "type": "array"
        }
      },
      "type": "object",
      "description": "Response proto for SearchText. "
    },
    "GoogleMapsPlacesV1PlaceOpeningHoursPeriodPoint": {
      "type": "object",
      "description": "Status changing points.",
      "id": "GoogleMapsPlacesV1PlaceOpeningHoursPeriodPoint",
      "properties": {
        "truncated": {
          "type": "boolean",
          "description": "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."
        },
        "hour": {
          "format": "int32",
          "description": "The hour in 24 hour format. Ranges from 0 to 23.",
          "type": "integer"
        },
        "minute": {
          "description": "The minute. Ranges from 0 to 59.",
          "type": "integer",
          "format": "int32"
        },
        "date": {
          "$ref": "GoogleTypeDate",
          "description": "Date in the local timezone for the place."
        },
        "day": {
          "type": "integer",
          "description": "A day of the week, as an integer in the range 0-6. 0 is Sunday, 1 is Monday, etc.",
          "format": "int32"
        }
      }
    },
    "GoogleMapsPlacesV1PriceRange": {
      "properties": {
        "startPrice": {
          "$ref": "GoogleTypeMoney",
          "description": "The low end of the price range (inclusive). Price should be at or above this amount."
        },
        "endPrice": {
          "description": "The high end of the price range (exclusive). Price should be lower than this amount.",
          "$ref": "GoogleTypeMoney"
        }
      },
      "type": "object",
      "description": "The price range associated with a Place. `end_price` could be unset, which indicates a range without upper bound (e.g. \"More than $100\").",
      "id": "GoogleMapsPlacesV1PriceRange"
    },
    "GoogleMapsPlacesV1RoutingSummaryLeg": {
      "id": "GoogleMapsPlacesV1RoutingSummaryLeg",
      "type": "object",
      "description": "A leg is a single portion of a journey from one location to another.",
      "properties": {
        "distanceMeters": {
          "description": "The distance of this leg of the trip.",
          "format": "int32",
          "type": "integer"
        },
        "duration": {
          "description": "The time it takes to complete this leg of the trip.",
          "format": "google-duration",
          "type": "string"
        }
      }
    },
    "GoogleMapsPlacesV1RoutingSummary": {
      "description": "The duration and distance from the routing origin to a place in the response, and a second leg from that place to the destination, if requested. **Note:** Adding `routingSummaries` in the field mask without also including either the `routingParameters.origin` parameter or the `searchAlongRouteParameters.polyline.encodedPolyline` parameter in the request causes an error.",
      "type": "object",
      "properties": {
        "legs": {
          "items": {
            "$ref": "GoogleMapsPlacesV1RoutingSummaryLeg"
          },
          "description": "The legs of the trip. When you calculate travel duration and distance from a set origin, `legs` contains a single leg containing the duration and distance from the origin to the destination. When you do a search along route, `legs` contains two legs: one from the origin to place, and one from the place to the destination.",
          "type": "array"
        },
        "directionsUri": {
          "type": "string",
          "description": "A link to show directions on Google Maps using the waypoints from the given routing summary. The route generated by this link is not guaranteed to be the same as the route used to generate the routing summary. The link uses information provided in the request, from fields including `routingParameters` and `searchAlongRouteParameters` when applicable, to generate the directions link."
        }
      },
      "id": "GoogleMapsPlacesV1RoutingSummary"
    },
    "GoogleMapsPlacesV1ContextualContentJustificationReviewJustification": {
      "id": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustification",
      "properties": {
        "review": {
          "description": "The review that the highlighted text is generated from.",
          "$ref": "GoogleMapsPlacesV1Review"
        },
        "highlightedText": {
          "$ref": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedText"
        }
      },
      "description": "User review justifications. This highlights a section of the user review that would interest an end user. For instance, if the search query is \"firewood pizza\", the review justification highlights the text relevant to the search query.",
      "type": "object"
    },
    "GoogleMapsPlacesV1AddressDescriptorArea": {
      "properties": {
        "placeId": {
          "description": "The area's place id.",
          "type": "string"
        },
        "containment": {
          "enum": [
            "CONTAINMENT_UNSPECIFIED",
            "WITHIN",
            "OUTSKIRTS",
            "NEAR"
          ],
          "enumDescriptions": [
            "The containment is unspecified.",
            "The target location is within the area region, close to the center.",
            "The target location is within the area region, close to the edge.",
            "The target location is outside the area region, but close by."
          ],
          "type": "string",
          "description": "Defines the spatial relationship between the target location and the area."
        },
        "name": {
          "description": "The area's resource name.",
          "type": "string"
        },
        "displayName": {
          "description": "The area's display name.",
          "$ref": "GoogleTypeLocalizedText"
        }
      },
      "description": "Area information and the area's relationship with the target location. Areas includes precise sublocality, neighborhoods, and large compounds that are useful for describing a location.",
      "id": "GoogleMapsPlacesV1AddressDescriptorArea",
      "type": "object"
    },
    "GoogleTypeLatLng": {
      "type": "object",
      "id": "GoogleTypeLatLng",
      "properties": {
        "latitude": {
          "format": "double",
          "type": "number",
          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0]."
        },
        "longitude": {
          "type": "number",
          "format": "double",
          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0]."
        }
      },
      "description": "An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this object must conform to the WGS84 standard. Values must be within normalized ranges."
    },
    "GoogleMapsPlacesV1PlaceSubDestination": {
      "description": "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.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The resource name of the sub-destination."
        },
        "id": {
          "type": "string",
          "description": "The place id of the sub-destination."
        }
      },
      "type": "object",
      "id": "GoogleMapsPlacesV1PlaceSubDestination"
    },
    "GoogleMapsPlacesV1AutocompletePlacesRequestLocationBias": {
      "id": "GoogleMapsPlacesV1AutocompletePlacesRequestLocationBias",
      "description": "The region to search. The results may be biased around the specified region.",
      "properties": {
        "circle": {
          "description": "A circle defined by a center point and radius.",
          "$ref": "GoogleMapsPlacesV1Circle"
        },
        "rectangle": {
          "description": "A viewport defined by a northeast and a southwest corner.",
          "$ref": "GoogleGeoTypeViewport"
        }
      },
      "type": "object"
    },
    "GoogleMapsPlacesV1RouteModifiers": {
      "type": "object",
      "id": "GoogleMapsPlacesV1RouteModifiers",
      "description": "Encapsulates a set of optional conditions to satisfy when calculating the routes.",
      "properties": {
        "avoidHighways": {
          "type": "boolean",
          "description": "Optional. When set to true, avoids highways where reasonable, giving preference to routes not containing highways. Applies only to the `DRIVE` and `TWO_WHEELER` `TravelMode`."
        },
        "avoidIndoor": {
          "description": "Optional. When set to true, avoids navigating indoors where reasonable, giving preference to routes not containing indoor navigation. Applies only to the `WALK` `TravelMode`.",
          "type": "boolean"
        },
        "avoidTolls": {
          "description": "Optional. When set to true, avoids toll roads where reasonable, giving preference to routes not containing toll roads. Applies only to the `DRIVE` and `TWO_WHEELER` `TravelMode`.",
          "type": "boolean"
        },
        "avoidFerries": {
          "type": "boolean",
          "description": "Optional. When set to true, avoids ferries where reasonable, giving preference to routes not containing ferries. Applies only to the `DRIVE` and `TWO_WHEELER` `TravelMode`."
        }
      }
    },
    "GoogleMapsPlacesV1SearchNearbyRequest": {
      "properties": {
        "locationRestriction": {
          "$ref": "GoogleMapsPlacesV1SearchNearbyRequestLocationRestriction",
          "description": "Required. The region to search."
        },
        "includedPrimaryTypes": {
          "type": "array",
          "description": "Included primary Place type (e.g. \"restaurant\" or \"gas_station\") from https://developers.google.com/maps/documentation/places/web-service/place-types. A place can only have a single primary type from the supported types table associated with it. Up to 50 types from [Table A](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a) may be specified. If there are any conflicting primary types, i.e. a type appears in both included_primary_types and excluded_primary_types, an INVALID_ARGUMENT error is returned. If a Place type is specified with multiple type restrictions, only places that satisfy all of the restrictions are returned. For example, if we have {included_types = [\"restaurant\"], excluded_primary_types = [\"restaurant\"]}, the returned places provide \"restaurant\" related services but do not operate primarily as \"restaurants\".",
          "items": {
            "type": "string"
          }
        },
        "excludedPrimaryTypes": {
          "description": "Excluded primary Place type (e.g. \"restaurant\" or \"gas_station\") from https://developers.google.com/maps/documentation/places/web-service/place-types. Up to 50 types from [Table A](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a) may be specified. If there are any conflicting primary types, i.e. a type appears in both included_primary_types and excluded_primary_types, an INVALID_ARGUMENT error is returned. If a Place type is specified with multiple type restrictions, only places that satisfy all of the restrictions are returned. For example, if we have {included_types = [\"restaurant\"], excluded_primary_types = [\"restaurant\"]}, the returned places provide \"restaurant\" related services but do not operate primarily as \"restaurants\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "maxResultCount": {
          "format": "int32",
          "type": "integer",
          "description": "Maximum number of results to return. It must be between 1 and 20 (default), inclusively. If the number is unset, it falls back to the upper limit. If the number is set to negative or exceeds the upper limit, an INVALID_ARGUMENT error is returned."
        },
        "rankPreference": {
          "type": "string",
          "description": "How results will be ranked in the response.",
          "enumDescriptions": [
            "RankPreference value not set. Will use rank by POPULARITY by default.",
            "Ranks results by distance.",
            "Ranks results by popularity."
          ],
          "enum": [
            "RANK_PREFERENCE_UNSPECIFIED",
            "DISTANCE",
            "POPULARITY"
          ]
        },
        "languageCode": {
          "description": "Place details will be displayed with the preferred language if available. If the language code is unspecified or unrecognized, place details of any language may be returned, with a preference for English if such details exist. Current list of supported languages: https://developers.google.com/maps/faq#languagesupport.",
          "type": "string"
        },
        "regionCode": {
          "description": "The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html. Note that 3-digit region codes are not currently supported.",
          "type": "string"
        },
        "routingParameters": {
          "description": "Optional. Parameters that affect the routing to the search results.",
          "$ref": "GoogleMapsPlacesV1RoutingParameters"
        },
        "includedTypes": {
          "type": "array",
          "description": "Included Place type (eg, \"restaurant\" or \"gas_station\") from https://developers.google.com/maps/documentation/places/web-service/place-types. Up to 50 types from [Table A](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a) may be specified. If there are any conflicting types, i.e. a type appears in both included_types and excluded_types, an INVALID_ARGUMENT error is returned. If a Place type is specified with multiple type restrictions, only places that satisfy all of the restrictions are returned. For example, if we have {included_types = [\"restaurant\"], excluded_primary_types = [\"restaurant\"]}, the returned places provide \"restaurant\" related services but do not operate primarily as \"restaurants\".",
          "items": {
            "type": "string"
          }
        },
        "excludedTypes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Excluded Place type (eg, \"restaurant\" or \"gas_station\") from https://developers.google.com/maps/documentation/places/web-service/place-types. Up to 50 types from [Table A](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a) may be specified. If the client provides both included_types (e.g. restaurant) and excluded_types (e.g. cafe), then the response should include places that are restaurant but not cafe. The response includes places that match at least one of the included_types and none of the excluded_types. If there are any conflicting types, i.e. a type appears in both included_types and excluded_types, an INVALID_ARGUMENT error is returned. If a Place type is specified with multiple type restrictions, only places that satisfy all of the restrictions are returned. For example, if we have {included_types = [\"restaurant\"], excluded_primary_types = [\"restaurant\"]}, the returned places provide \"restaurant\" related services but do not operate primarily as \"restaurants\"."
        },
        "includeFutureOpeningBusinesses": {
          "description": "Optional. If true, include businesses that are not yet open but will open in the future.",
          "type": "boolean"
        }
      },
      "id": "GoogleMapsPlacesV1SearchNearbyRequest",
      "description": "Request proto for Search Nearby. ",
      "type": "object"
    },
    "GoogleMapsPlacesV1SearchTextRequest": {
      "id": "GoogleMapsPlacesV1SearchTextRequest",
      "description": "Request proto for SearchText. ",
      "type": "object",
      "properties": {
        "includePureServiceAreaBusinesses": {
          "description": "Optional. Include pure service area businesses if the field is set to true. 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 do not have a physical address or location on Google Maps. Places will not return fields including `location`, `plus_code`, and other location related fields for these businesses.",
          "type": "boolean"
        },
        "pageSize": {
          "type": "integer",
          "description": "Optional. The maximum number of results per page that can be returned. If the number of available results is larger than `page_size`, a `next_page_token` is returned which can be passed to `page_token` to get the next page of results in subsequent requests. If 0 or no value is provided, a default of 20 is used. The maximum value is 20; values above 20 will be set to 20. Negative values will return an INVALID_ARGUMENT error. If both `max_result_count` and `page_size` are specified, `max_result_count` will be ignored.",
          "format": "int32"
        },
        "locationBias": {
          "description": "The region to search. This location serves as a bias which means results around given location might be returned. Cannot be set along with location_restriction.",
          "$ref": "GoogleMapsPlacesV1SearchTextRequestLocationBias"
        },
        "regionCode": {
          "type": "string",
          "description": "The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html. Note that 3-digit region codes are not currently supported."
        },
        "searchAlongRouteParameters": {
          "description": "Optional. Additional parameters proto for searching along a route.",
          "$ref": "GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters"
        },
        "locationRestriction": {
          "$ref": "GoogleMapsPlacesV1SearchTextRequestLocationRestriction",
          "description": "The region to search. This location serves as a restriction which means results outside given location will not be returned. Cannot be set along with location_bias."
        },
        "languageCode": {
          "type": "string",
          "description": "Place details will be displayed with the preferred language if available. If the language code is unspecified or unrecognized, place details of any language may be returned, with a preference for English if such details exist. Current list of supported languages: https://developers.google.com/maps/faq#languagesupport."
        },
        "priceLevels": {
          "items": {
            "enumDescriptions": [
              "Place price level is unspecified or unknown.",
              "Place provides free services.",
              "Place provides inexpensive services.",
              "Place provides moderately priced services.",
              "Place provides expensive services.",
              "Place provides very expensive services."
            ],
            "enum": [
              "PRICE_LEVEL_UNSPECIFIED",
              "PRICE_LEVEL_FREE",
              "PRICE_LEVEL_INEXPENSIVE",
              "PRICE_LEVEL_MODERATE",
              "PRICE_LEVEL_EXPENSIVE",
              "PRICE_LEVEL_VERY_EXPENSIVE"
            ],
            "type": "string"
          },
          "type": "array",
          "description": "Used to restrict the search to places that are marked as certain price levels. Users can choose any combinations of price levels. Default to select all price levels."
        },
        "openNow": {
          "description": "Used to restrict the search to places that are currently open. The default is false.",
          "type": "boolean"
        },
        "includeFutureOpeningBusinesses": {
          "description": "Optional. If true, include businesses that are not yet open but will open in the future.",
          "type": "boolean"
        },
        "strictTypeFiltering": {
          "description": "Used to set strict type filtering for included_type. If set to true, only results of the same type will be returned. Default to false.",
          "type": "boolean"
        },
        "pageToken": {
          "description": "Optional. A page token, received from a previous TextSearch call. Provide this to retrieve the subsequent page. When paginating, all parameters other than `page_token`, `page_size`, and `max_result_count` provided to TextSearch must match the initial call that provided the page token. Otherwise an INVALID_ARGUMENT error is returned.",
          "type": "string"
        },
        "rankPreference": {
          "enumDescriptions": [
            "For a categorical query such as \"Restaurants in New York City\", RELEVANCE is the default. For non-categorical queries such as \"Mountain View, CA\" we recommend that you leave rankPreference unset.",
            "Ranks results by distance.",
            "Ranks results by relevance. Sort order determined by normal ranking stack."
          ],
          "type": "string",
          "description": "How results will be ranked in the response.",
          "enum": [
            "RANK_PREFERENCE_UNSPECIFIED",
            "DISTANCE",
            "RELEVANCE"
          ]
        },
        "maxResultCount": {
          "type": "integer",
          "deprecated": true,
          "format": "int32",
          "description": "Deprecated: Use `page_size` instead. The maximum number of results per page that can be returned. If the number of available results is larger than `max_result_count`, a `next_page_token` is returned which can be passed to `page_token` to get the next page of results in subsequent requests. If 0 or no value is provided, a default of 20 is used. The maximum value is 20; values above 20 will be coerced to 20. Negative values will return an INVALID_ARGUMENT error. If both `max_result_count` and `page_size` are specified, `max_result_count` will be ignored."
        },
        "textQuery": {
          "type": "string",
          "description": "Required. The text query for textual search."
        },
        "evOptions": {
          "$ref": "GoogleMapsPlacesV1SearchTextRequestEVOptions",
          "description": "Optional. Set the searchable EV options of a place search request."
        },
        "routingParameters": {
          "description": "Optional. Additional parameters for routing to results.",
          "$ref": "GoogleMapsPlacesV1RoutingParameters"
        },
        "includedType": {
          "type": "string",
          "description": "The requested place type. Full list of types supported: https://developers.google.com/maps/documentation/places/web-service/place-types. Only support one included type."
        },
        "minRating": {
          "description": "Filter out results whose average user rating is strictly less than this limit. A valid value must be a float between 0 and 5 (inclusively) at a 0.5 cadence i.e. [0, 0.5, 1.0, ... , 5.0] inclusively. The input rating will round up to the nearest 0.5(ceiling). For instance, a rating of 0.6 will eliminate all results with a less than 1.0 rating.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleMapsPlacesV1PlaceConsumerAlert": {
      "properties": {
        "overview": {
          "description": "The overview of the consumer alert message.",
          "type": "string"
        },
        "details": {
          "description": "The details of the consumer alert message.",
          "$ref": "GoogleMapsPlacesV1PlaceConsumerAlertDetails"
        },
        "languageCode": {
          "description": "The language code of the consumer alert message. This is a BCP 47 language code.",
          "type": "string"
        }
      },
      "description": "The consumer alert message for the place when we detect suspicious review activity on a business or a business violates our policies.",
      "type": "object",
      "id": "GoogleMapsPlacesV1PlaceConsumerAlert"
    },
    "GoogleGeoTypeViewport": {
      "description": "A latitude-longitude viewport, represented as two diagonally opposite `low` and `high` points. A viewport is considered a closed region, i.e. it includes its boundary. The latitude bounds must range between -90 to 90 degrees inclusive, and the longitude bounds must range between -180 to 180 degrees inclusive. Various cases include: - If `low` = `high`, the viewport consists of that single point. - If `low.longitude` \u003e `high.longitude`, the longitude range is inverted (the viewport crosses the 180 degree longitude line). - If `low.longitude` = -180 degrees and `high.longitude` = 180 degrees, the viewport includes all longitudes. - If `low.longitude` = 180 degrees and `high.longitude` = -180 degrees, the longitude range is empty. - If `low.latitude` \u003e `high.latitude`, the latitude range is empty. Both `low` and `high` must be populated, and the represented box cannot be empty (as specified by the definitions above). An empty viewport will result in an error. For example, this viewport fully encloses New York City: { \"low\": { \"latitude\": 40.477398, \"longitude\": -74.259087 }, \"high\": { \"latitude\": 40.91618, \"longitude\": -73.70018 } }",
      "id": "GoogleGeoTypeViewport",
      "properties": {
        "high": {
          "description": "Required. The high point of the viewport.",
          "$ref": "GoogleTypeLatLng"
        },
        "low": {
          "$ref": "GoogleTypeLatLng",
          "description": "Required. The low point of the viewport."
        }
      },
      "type": "object"
    },
    "GoogleTypePostalAddress": {
      "properties": {
        "organization": {
          "type": "string",
          "description": "Optional. The name of the organization at the address."
        },
        "regionCode": {
          "type": "string",
          "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See https://cldr.unicode.org/ and https://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland."
        },
        "postalCode": {
          "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (for example, state or zip code validation in the United States).",
          "type": "string"
        },
        "languageCode": {
          "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
          "type": "string"
        },
        "sublocality": {
          "description": "Optional. Sublocality of the address. For example, this can be a neighborhood, borough, or district.",
          "type": "string"
        },
        "addressLines": {
          "description": "Unstructured address lines describing the lower levels of an address. Because values in `address_lines` do not have type information and may sometimes contain multiple values in a single field (for example, \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country or region of the address. In places where this can vary (for example, Japan), `address_language` is used to make it explicit (for example, \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). In this way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a `region_code` with all remaining information placed in the `address_lines`. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a `region_code` and `address_lines` and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "revision": {
          "type": "integer",
          "format": "int32",
          "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions."
        },
        "administrativeArea": {
          "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. For Spain, this is the province and not the autonomous community (for example, \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. For example, in Switzerland, this should be left unpopulated.",
          "type": "string"
        },
        "sortingCode": {
          "type": "string",
          "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (for example, \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (Côte d'Ivoire)."
        },
        "recipients": {
          "items": {
            "type": "string"
          },
          "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information.",
          "type": "array"
        },
        "locality": {
          "type": "string",
          "description": "Optional. Generally refers to the city or town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave `locality` empty and use `address_lines`."
        }
      },
      "type": "object",
      "description": "Represents a postal address, such as for postal delivery or payments addresses. With a postal address, a postal service can deliver items to a premise, P.O. box, or similar. A postal address is not intended to model geographical locations like roads, towns, or mountains. In typical usage, an address would be created by user input or from importing existing data, depending on the type of process. Advice on address input or editing: - Use an internationalization-ready address widget such as https://github.com/google/libaddressinput. - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, see: https://support.google.com/business/answer/6397478.",
      "id": "GoogleTypePostalAddress"
    },
    "GoogleMapsPlacesV1TransitStop": {
      "id": "GoogleMapsPlacesV1TransitStop",
      "type": "object",
      "description": "Represents a transit stop within a station. This is a specific location where passengers board and alight transit vehicles, such as a platform or bus bay. This is distinct from a `Departure`, which is an event of a vehicle leaving a stop at a specific time.",
      "properties": {
        "wheelchairAccessibleEntrance": {
          "type": "boolean",
          "description": "Wheelchair accessibility of this stop. This field indicates whether there is an accessible path from outside the station to the stop. It does not indicate whether it is possible to board a vehicle from the stop."
        },
        "platformCode": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The platform code represented by this stop. It can be formatted in any way. (eg: \"2\", \"Platform 2\", \"2-4\", or \"1x\")."
        },
        "location": {
          "description": "The stop's location.",
          "$ref": "GoogleTypeLatLng"
        },
        "displayName": {
          "description": "The name of the stop.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "id": {
          "description": "The id of the transit stop that can be used to uniquely identify the stop among other transit stops in the same transit station. This identifier is not guaranteed to be stable across different responses.",
          "type": "string"
        },
        "signageText": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The verbatim text written on the signboard for this platform, e.g. \"Towards Central\" or \"East side & Brooklyn\". When `platform_code` is absent, this field is potentially the only identifier for the platform; however, both `platform_code` and `signage_text` may be set simultaneously."
        },
        "stopCode": {
          "description": "Human readable identifier of the stop, used by transit agencies to distinguish stops with the same name.",
          "$ref": "GoogleTypeLocalizedText"
        }
      }
    },
    "GoogleMapsPlacesV1AddressDescriptorLandmark": {
      "properties": {
        "placeId": {
          "description": "The landmark's place id.",
          "type": "string"
        },
        "straightLineDistanceMeters": {
          "type": "number",
          "format": "float",
          "description": "The straight line distance, in meters, between the center point of the target and the center point of the landmark. In some situations, this value can be longer than `travel_distance_meters`."
        },
        "displayName": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The landmark's display name."
        },
        "travelDistanceMeters": {
          "format": "float",
          "type": "number",
          "description": "The travel distance, in meters, along the road network from the target to the landmark, if known. This value does not take into account the mode of transportation, such as walking, driving, or biking."
        },
        "spatialRelationship": {
          "description": "Defines the spatial relationship between the target location and the landmark.",
          "type": "string",
          "enumDescriptions": [
            "This is the default relationship when nothing more specific below applies.",
            "The landmark has a spatial geometry and the target is within its bounds.",
            "The target is directly adjacent to the landmark.",
            "The target is directly opposite the landmark on the other side of the road.",
            "On the same route as the landmark but not besides or across.",
            "Not on the same route as the landmark but a single turn away.",
            "Close to the landmark's structure but further away from its street entrances."
          ],
          "enum": [
            "NEAR",
            "WITHIN",
            "BESIDE",
            "ACROSS_THE_ROAD",
            "DOWN_THE_ROAD",
            "AROUND_THE_CORNER",
            "BEHIND"
          ]
        },
        "name": {
          "description": "The landmark's resource name.",
          "type": "string"
        },
        "types": {
          "type": "array",
          "description": "A set of type tags for this landmark. For a complete list of possible values, see https://developers.google.com/maps/documentation/places/web-service/place-types.",
          "items": {
            "type": "string"
          }
        }
      },
      "type": "object",
      "description": "Basic landmark information and the landmark's relationship with the target location. Landmarks are prominent places that can be used to describe a location.",
      "id": "GoogleMapsPlacesV1AddressDescriptorLandmark"
    },
    "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedTextHighlightedTextRange": {
      "properties": {
        "startIndex": {
          "format": "int32",
          "type": "integer"
        },
        "endIndex": {
          "type": "integer",
          "format": "int32"
        }
      },
      "id": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustificationHighlightedTextHighlightedTextRange",
      "description": "The range of highlighted text.",
      "type": "object"
    },
    "GoogleMapsPlacesV1Polyline": {
      "description": "A route polyline. Only supports an [encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm), which can be passed as a string and includes compression with minimal lossiness. This is the Routes API default output.",
      "properties": {
        "encodedPolyline": {
          "type": "string",
          "description": "An [encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm), as returned by the [Routes API by default](https://developers.google.com/maps/documentation/routes/reference/rest/v2/TopLevel/computeRoutes#polylineencoding). See the [encoder](https://developers.google.com/maps/documentation/utilities/polylineutility) and [decoder](https://developers.google.com/maps/documentation/routes/polylinedecoder) tools."
        }
      },
      "type": "object",
      "id": "GoogleMapsPlacesV1Polyline"
    },
    "GoogleMapsPlacesV1PlaceParkingOptions": {
      "description": "Information about parking options for the place. A parking lot could support more than one option at the same time.",
      "type": "object",
      "properties": {
        "freeGarageParking": {
          "type": "boolean",
          "description": "Place offers free garage parking."
        },
        "paidParkingLot": {
          "type": "boolean",
          "description": "Place offers paid parking lots."
        },
        "valetParking": {
          "type": "boolean",
          "description": "Place offers valet parking."
        },
        "freeStreetParking": {
          "description": "Place offers free street parking.",
          "type": "boolean"
        },
        "paidStreetParking": {
          "type": "boolean",
          "description": "Place offers paid street parking."
        },
        "paidGarageParking": {
          "description": "Place offers paid garage parking.",
          "type": "boolean"
        },
        "freeParkingLot": {
          "type": "boolean",
          "description": "Place offers free parking lots."
        }
      },
      "id": "GoogleMapsPlacesV1PlaceParkingOptions"
    },
    "GoogleMapsPlacesV1PlaceAttribution": {
      "properties": {
        "provider": {
          "description": "Name of the Place's data provider.",
          "type": "string"
        },
        "providerUri": {
          "description": "URI to the Place's data provider.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "GoogleMapsPlacesV1PlaceAttribution",
      "description": "Information about data providers of this place."
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestion": {
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestion",
      "properties": {
        "placePrediction": {
          "description": "A prediction for a Place.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionPlacePrediction"
        },
        "queryPrediction": {
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionQueryPrediction",
          "description": "A prediction for a query."
        }
      },
      "description": "An Autocomplete suggestion result.",
      "type": "object"
    },
    "GoogleTypeDate": {
      "type": "object",
      "properties": {
        "month": {
          "type": "integer",
          "format": "int32",
          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day."
        },
        "year": {
          "type": "integer",
          "format": "int32",
          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year."
        },
        "day": {
          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
          "format": "int32",
          "type": "integer"
        }
      },
      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp",
      "id": "GoogleTypeDate"
    },
    "GoogleMapsPlacesV1TransitLine": {
      "type": "object",
      "id": "GoogleMapsPlacesV1TransitLine",
      "properties": {
        "url": {
          "type": "string",
          "description": "The URL of a webpage with details about this line."
        },
        "displayName": {
          "description": "The long name for this transit line (e.g. \"Sunnydale local\").",
          "$ref": "GoogleTypeLocalizedText"
        },
        "textColor": {
          "description": "The text color of labels for this transit line in #RRGGBB hex format, e.g. #909CE1.",
          "type": "string"
        },
        "shortDisplayName": {
          "description": "The short name for this transit line (e.g. \"S2\").",
          "$ref": "GoogleTypeLocalizedText"
        },
        "vehicleIcon": {
          "description": "Icon identifier for this particular vehicle type.",
          "$ref": "GoogleMapsPlacesV1TransitIcon"
        },
        "icon": {
          "$ref": "GoogleMapsPlacesV1TransitIcon",
          "description": "Icon identifier for this particular line (e.g. subway lines in New York)."
        },
        "backgroundColor": {
          "description": "The background color of the labels for this transit line in #RRGGBB hex format, e.g. #909CE1. This color can also be used for drawing shapes for this transit line.",
          "type": "string"
        },
        "vehicleType": {
          "description": "The type of vehicle using this line.",
          "type": "string",
          "enum": [
            "VEHICLE_TYPE_UNSPECIFIED",
            "RAIL",
            "METRO_RAIL",
            "SUBWAY",
            "TRAM",
            "MONORAIL",
            "HEAVY_RAIL",
            "COMMUTER_TRAIN",
            "HIGH_SPEED_TRAIN",
            "LONG_DISTANCE_TRAIN",
            "BUS",
            "INTERCITY_BUS",
            "TROLLEYBUS",
            "SHARE_TAXI",
            "COACH",
            "FERRY",
            "CABLE_CAR",
            "GONDOLA_LIFT",
            "FUNICULAR",
            "SPECIAL",
            "HORSE_CARRIAGE",
            "AIRPLANE"
          ],
          "enumDescriptions": [
            "Default value when vehicle type is not specified.",
            "Rail.",
            "Metro rail.",
            "Subway.",
            "Tram.",
            "Monorail.",
            "Heavy rail.",
            "Commuter train.",
            "High speed train.",
            "Long distance train.",
            "Bus.",
            "Intercity bus.",
            "Trolleybus.",
            "Share taxi.",
            "Coach.",
            "Ferry.",
            "Cable car.",
            "Gondola lift.",
            "Funicular.",
            "Special.",
            "Horse carriage.",
            "Airplane."
          ]
        },
        "id": {
          "type": "string",
          "description": "The id of the transit line that can be used to uniquely identify the line among other transit lines in the same transit station. This identifier is not guaranteed to be stable across different responses."
        }
      },
      "description": "Represents a single transit line."
    },
    "GoogleMapsPlacesV1Review": {
      "properties": {
        "visitDate": {
          "description": "The date when the author visited the place. This is truncated to the year and month of the visit.",
          "$ref": "GoogleTypeDate"
        },
        "googleMapsUri": {
          "type": "string",
          "description": "A link to show the review on Google Maps."
        },
        "text": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The localized text of the review."
        },
        "publishTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Timestamp for the review."
        },
        "flagContentUri": {
          "type": "string",
          "description": "A link where users can flag a problem with the review."
        },
        "name": {
          "description": "A reference representing this place review which may be used to look up this place review again (also called the API \"resource\" name: `places/{place_id}/reviews/{review}`).",
          "type": "string"
        },
        "relativePublishTimeDescription": {
          "type": "string",
          "description": "A string of formatted recent time, expressing the review time relative to the current time in a form appropriate for the language and country."
        },
        "authorAttribution": {
          "description": "This review's author.",
          "$ref": "GoogleMapsPlacesV1AuthorAttribution"
        },
        "originalText": {
          "description": "The review text in its original language.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "rating": {
          "type": "number",
          "format": "double",
          "description": "A number between 1.0 and 5.0, also called the number of stars."
        }
      },
      "description": "Information about a review of a place.",
      "type": "object",
      "id": "GoogleMapsPlacesV1Review"
    },
    "GoogleMapsPlacesV1FuelOptionsFuelPrice": {
      "type": "object",
      "properties": {
        "type": {
          "enum": [
            "FUEL_TYPE_UNSPECIFIED",
            "DIESEL",
            "DIESEL_PLUS",
            "REGULAR_UNLEADED",
            "MIDGRADE",
            "PREMIUM",
            "SP91",
            "SP91_E10",
            "SP92",
            "SP95",
            "SP95_E10",
            "SP98",
            "SP99",
            "SP100",
            "LPG",
            "E80",
            "E85",
            "E100",
            "METHANE",
            "BIO_DIESEL",
            "TRUCK_DIESEL"
          ],
          "enumDescriptions": [
            "Unspecified fuel type.",
            "Diesel fuel.",
            "Diesel plus fuel.",
            "Regular unleaded.",
            "Midgrade.",
            "Premium.",
            "SP 91.",
            "SP 91 E10.",
            "SP 92.",
            "SP 95.",
            "SP95 E10.",
            "SP 98.",
            "SP 99.",
            "SP 100.",
            "Liquefied Petroleum Gas.",
            "E 80.",
            "E 85.",
            "E 100.",
            "Methane.",
            "Bio-diesel.",
            "Truck diesel."
          ],
          "description": "The type of fuel.",
          "type": "string"
        },
        "updateTime": {
          "description": "The time the fuel price was last updated. This represents the time when the specific fuel price offer was last observed or updated by the data provider.",
          "format": "google-datetime",
          "type": "string"
        },
        "price": {
          "description": "The price of the fuel. The price is per US liquid gallon in the United States, and per liter elsewhere. Prices do not distinguish between payment methods (cash or credit). When a station offers multiple prices for the same `FuelType`, the API returns the standard (highest) price.",
          "$ref": "GoogleTypeMoney"
        }
      },
      "description": "Fuel price information for a given type.",
      "id": "GoogleMapsPlacesV1FuelOptionsFuelPrice"
    },
    "GoogleTypeLocalizedText": {
      "properties": {
        "text": {
          "description": "Localized string in the language corresponding to language_code below.",
          "type": "string"
        },
        "languageCode": {
          "description": "The text's BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "GoogleTypeLocalizedText",
      "description": "Localized variant of a text in a particular language."
    },
    "GoogleMapsPlacesV1PlaceNavigationPoint": {
      "properties": {
        "location": {
          "$ref": "GoogleTypeLatLng",
          "description": "A point next to the road segment where navigation should end. The point is intentionally slightly offset from the road's centerline to clearly mark the side of the road where the place is located."
        },
        "displayName": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The display name of this navigation point. For example, \"5th Ave\" or \"Gate B\"."
        },
        "travelModes": {
          "type": "array",
          "description": "Travel modes that are appropriate for this navigation point.",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not used.",
              "Suitable for driving.",
              "Suitable for walking."
            ],
            "enum": [
              "TRAVEL_MODE_UNSPECIFIED",
              "DRIVE",
              "WALK"
            ]
          }
        },
        "usages": {
          "description": "Lists `usages` supported by this navigation point. If empty, it does not necessarily mean its usage is restricted in any way. All navigation points can be used for general navigation.",
          "items": {
            "type": "string",
            "enum": [
              "USAGE_UNSPECIFIED",
              "DROPOFF",
              "PICKUP",
              "PARKING"
            ],
            "enumDescriptions": [
              "Not used.",
              "Suitable for dropping off a passenger. For example, a rideshare drop off location.",
              "Suitable for picking up a passenger. For example, a rideshare pick up location.",
              "Suitable for parking. For example, within a parking lot."
            ]
          },
          "type": "array"
        },
        "navigationPointToken": {
          "type": "string",
          "description": "A token that can be used to identify this navigation point."
        }
      },
      "id": "GoogleMapsPlacesV1PlaceNavigationPoint",
      "description": "A navigation point is a location next to a road where navigation can end.",
      "type": "object"
    },
    "GoogleMapsPlacesV1PlaceGoogleMapsLinks": {
      "id": "GoogleMapsPlacesV1PlaceGoogleMapsLinks",
      "type": "object",
      "description": "Links to trigger different Google Maps actions.",
      "properties": {
        "writeAReviewUri": {
          "description": "A link to write a review for this place on Google Maps.",
          "type": "string"
        },
        "reviewsUri": {
          "description": "A link to show reviews of this place on Google Maps.",
          "type": "string"
        },
        "photosUri": {
          "description": "A link to show photos of this place on Google Maps.",
          "type": "string"
        },
        "directionsUri": {
          "description": "A link to show the directions to the place. The link only populates the destination location and uses the default travel mode `DRIVE`.",
          "type": "string"
        },
        "placeUri": {
          "type": "string",
          "description": "A link to show this place."
        }
      }
    },
    "GoogleMapsPlacesV1EVChargeOptions": {
      "id": "GoogleMapsPlacesV1EVChargeOptions",
      "type": "object",
      "properties": {
        "connectorCount": {
          "type": "integer",
          "description": "Number of connectors at this station. However, because some ports can have multiple connectors but only be able to charge one car at a time (e.g.) the number of connectors may be greater than the total number of cars which can charge simultaneously.",
          "format": "int32"
        },
        "connectorAggregation": {
          "items": {
            "$ref": "GoogleMapsPlacesV1EVChargeOptionsConnectorAggregation"
          },
          "description": "A list of EV charging connector aggregations that contain connectors of the same type and same charge rate.",
          "type": "array"
        }
      },
      "description": "Information about the EV Charge Station hosted in Place. Terminology follows https://afdc.energy.gov/fuels/electricity_infrastructure.html One port could charge one car at a time. One port has one or more connectors. One station has one or more ports."
    },
    "GoogleMapsPlacesV1PlaceOpeningHoursPeriod": {
      "description": "A period the place remains in open_now status.",
      "properties": {
        "close": {
          "description": "The time that the place starts to be closed.",
          "$ref": "GoogleMapsPlacesV1PlaceOpeningHoursPeriodPoint"
        },
        "open": {
          "$ref": "GoogleMapsPlacesV1PlaceOpeningHoursPeriodPoint",
          "description": "The time that the place starts to be open."
        }
      },
      "id": "GoogleMapsPlacesV1PlaceOpeningHoursPeriod",
      "type": "object"
    },
    "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionQueryPrediction": {
      "type": "object",
      "description": "Prediction results for a Query Autocomplete prediction.",
      "properties": {
        "text": {
          "description": "The predicted text. This text does not represent a Place, but rather a text query that could be used in a search endpoint (for example, Text Search). `text` is recommended for developers who wish to show a single UI element. Developers who wish to show two separate, but related, UI elements may want to use `structured_format` instead. They are two different ways to represent a query prediction. Users should not try to parse `structured_format` into `text` or vice versa. May be in mixed languages if the request `input` and `language_code` are in different languages or if part of the query does not have a translation from the local language to `language_code`.",
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionFormattableText"
        },
        "structuredFormat": {
          "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionStructuredFormat",
          "description": "A breakdown of the query prediction into main text containing the query and secondary text containing additional disambiguating features (such as a city or region). `structured_format` is recommended for developers who wish to show two separate, but related, UI elements. Developers who wish to show a single UI element may want to use `text` instead. They are two different ways to represent a query prediction. Users should not try to parse `structured_format` into `text` or vice versa."
        }
      },
      "id": "GoogleMapsPlacesV1AutocompletePlacesResponseSuggestionQueryPrediction"
    },
    "GoogleMapsPlacesV1PlaceConsumerAlertDetails": {
      "id": "GoogleMapsPlacesV1PlaceConsumerAlertDetails",
      "type": "object",
      "description": "The details of the consumer alert message.",
      "properties": {
        "title": {
          "type": "string",
          "description": "The title to show together with the description."
        },
        "aboutLink": {
          "description": "The link to show together with the description to provide more information.",
          "$ref": "GoogleMapsPlacesV1PlaceConsumerAlertDetailsLink"
        },
        "description": {
          "type": "string",
          "description": "The description of the consumer alert message."
        }
      }
    },
    "GoogleMapsPlacesV1PlaceReviewSummary": {
      "id": "GoogleMapsPlacesV1PlaceReviewSummary",
      "properties": {
        "disclosureText": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The AI disclosure message \"Summarized with Gemini\" (and its localized variants). This will be in the language specified in the request if available."
        },
        "reviewsUri": {
          "type": "string",
          "description": "A link to show reviews of this place on Google Maps."
        },
        "text": {
          "description": "The summary of user reviews.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "flagContentUri": {
          "type": "string",
          "description": "A link where users can flag a problem with the summary."
        }
      },
      "description": "AI-generated summary of the place using user reviews.",
      "type": "object"
    },
    "GoogleMapsPlacesV1FuelOptions": {
      "id": "GoogleMapsPlacesV1FuelOptions",
      "type": "object",
      "description": "The most recent information about fuel options in a gas station. This information is updated regularly.",
      "properties": {
        "fuelPrices": {
          "items": {
            "$ref": "GoogleMapsPlacesV1FuelOptionsFuelPrice"
          },
          "description": "The last known fuel price for each type of fuel this station has. There is one entry per fuel type this station has. Order is not important.",
          "type": "array"
        }
      }
    },
    "GoogleMapsPlacesV1TransitStation": {
      "description": "Represents transit-specific information for a place.",
      "type": "object",
      "properties": {
        "agencies": {
          "description": "The transit agencies that serve this station.",
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1TransitAgency"
          }
        },
        "displayName": {
          "description": "The name of the station in the local language.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "stops": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1TransitStop"
          },
          "description": "Transit stops at this station."
        }
      },
      "id": "GoogleMapsPlacesV1TransitStation"
    },
    "GoogleMapsPlacesV1ContextualContentJustification": {
      "id": "GoogleMapsPlacesV1ContextualContentJustification",
      "type": "object",
      "properties": {
        "reviewJustification": {
          "$ref": "GoogleMapsPlacesV1ContextualContentJustificationReviewJustification"
        },
        "businessAvailabilityAttributesJustification": {
          "$ref": "GoogleMapsPlacesV1ContextualContentJustificationBusinessAvailabilityAttributesJustification"
        }
      },
      "description": "Justifications for the place. Justifications answers the question of why a place could interest an end user."
    },
    "GoogleMapsPlacesV1TransitAgency": {
      "properties": {
        "url": {
          "type": "string",
          "description": "The URL of the agency's homepage."
        },
        "displayName": {
          "description": "Agency name (e.g. \"VTA\") in the requested language.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "icon": {
          "description": "Icon identifier for localized branded icon of a transit system (e.g. London Underground) which should be used instead of TransitLine.vehicle_icon in the UI.",
          "$ref": "GoogleMapsPlacesV1TransitIcon"
        },
        "lines": {
          "items": {
            "$ref": "GoogleMapsPlacesV1TransitLine"
          },
          "description": "The transit lines that are served by this agency.",
          "type": "array"
        },
        "fareUrl": {
          "type": "string",
          "description": "The URL of the agency's fare details page."
        }
      },
      "type": "object",
      "id": "GoogleMapsPlacesV1TransitAgency",
      "description": "Represents a transit agency."
    },
    "GoogleMapsPlacesV1SearchTextRequestEVOptions": {
      "properties": {
        "minimumChargingRateKw": {
          "format": "double",
          "description": "Optional. Minimum required charging rate in kilowatts. A place with a charging rate less than the specified rate is filtered out.",
          "type": "number"
        },
        "connectorTypes": {
          "description": "Optional. The list of preferred EV connector types. A place that does not support any of the listed connector types is filtered out.",
          "items": {
            "enum": [
              "EV_CONNECTOR_TYPE_UNSPECIFIED",
              "EV_CONNECTOR_TYPE_OTHER",
              "EV_CONNECTOR_TYPE_J1772",
              "EV_CONNECTOR_TYPE_TYPE_2",
              "EV_CONNECTOR_TYPE_CHADEMO",
              "EV_CONNECTOR_TYPE_CCS_COMBO_1",
              "EV_CONNECTOR_TYPE_CCS_COMBO_2",
              "EV_CONNECTOR_TYPE_TESLA",
              "EV_CONNECTOR_TYPE_UNSPECIFIED_GB_T",
              "EV_CONNECTOR_TYPE_UNSPECIFIED_WALL_OUTLET",
              "EV_CONNECTOR_TYPE_NACS"
            ],
            "enumDescriptions": [
              "Unspecified connector.",
              "Other connector types.",
              "J1772 type 1 connector.",
              "IEC 62196 type 2 connector. Often referred to as MENNEKES.",
              "CHAdeMO type connector.",
              "Combined Charging System (AC and DC). Based on SAE. Type-1 J-1772 connector",
              "Combined Charging System (AC and DC). Based on Type-2 Mennekes connector",
              "The generic TESLA connector. This is NACS in the North America but can be non-NACS in other parts of the world (e.g. CCS Combo 2 (CCS2) or GB/T). This value is less representative of an actual connector type, and more represents the ability to charge a Tesla brand vehicle at a Tesla owned charging station.",
              "GB/T type corresponds to the GB/T standard in China. This type covers all GB_T types.",
              "Unspecified wall outlet.",
              "The North American Charging System (NACS), standardized as SAE J3400."
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "GoogleMapsPlacesV1SearchTextRequestEVOptions",
      "type": "object",
      "description": "Searchable EV options of a place search request."
    },
    "GoogleMapsPlacesV1Place": {
      "description": "All the information representing a Place.",
      "properties": {
        "iconMaskBaseUri": {
          "type": "string",
          "description": "A truncated URL to an icon mask. User can access different icon type by appending type suffix to the end (eg, \".svg\" or \".png\")."
        },
        "reviewSummary": {
          "$ref": "GoogleMapsPlacesV1PlaceReviewSummary",
          "description": "AI-generated summary of the place using user reviews."
        },
        "utcOffsetMinutes": {
          "description": "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.",
          "format": "int32",
          "type": "integer"
        },
        "priceRange": {
          "description": "The price range associated with a Place.",
          "$ref": "GoogleMapsPlacesV1PriceRange"
        },
        "evChargeAmenitySummary": {
          "description": "The summary of amenities near the EV charging station.",
          "$ref": "GoogleMapsPlacesV1PlaceEvChargeAmenitySummary"
        },
        "neighborhoodSummary": {
          "description": "A summary of points of interest near the place.",
          "$ref": "GoogleMapsPlacesV1PlaceNeighborhoodSummary"
        },
        "servesCoffee": {
          "description": "Place serves coffee.",
          "type": "boolean"
        },
        "generativeSummary": {
          "$ref": "GoogleMapsPlacesV1PlaceGenerativeSummary",
          "description": "AI-generated summary of the place."
        },
        "internationalPhoneNumber": {
          "description": "A human-readable phone number for the place, in international format.",
          "type": "string"
        },
        "timeZone": {
          "description": "IANA Time Zone Database time zone. For example \"America/New_York\".",
          "$ref": "GoogleTypeTimeZone"
        },
        "entrances": {
          "description": "Entrances for this destination.",
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceEntrance"
          }
        },
        "evChargeOptions": {
          "description": "Information of ev charging options.",
          "$ref": "GoogleMapsPlacesV1EVChargeOptions"
        },
        "paymentOptions": {
          "$ref": "GoogleMapsPlacesV1PlacePaymentOptions",
          "description": "Payment options the place accepts. If a payment option data is not available, the payment option field will be unset."
        },
        "goodForGroups": {
          "description": "Place accommodates groups.",
          "type": "boolean"
        },
        "curbsidePickup": {
          "description": "Specifies if the business supports curbside pickup.",
          "type": "boolean"
        },
        "plusCode": {
          "$ref": "GoogleMapsPlacesV1PlacePlusCode",
          "description": "Plus code of the place location lat/long."
        },
        "displayName": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "The localized name of the place, suitable as a short human-readable description. For example, \"Google Sydney\", \"Starbucks\", \"Pyrmont\", etc."
        },
        "addressDescriptor": {
          "$ref": "GoogleMapsPlacesV1AddressDescriptor",
          "description": "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."
        },
        "editorialSummary": {
          "description": "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.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "servesDessert": {
          "description": "Place serves dessert.",
          "type": "boolean"
        },
        "name": {
          "description": "This Place's resource name, in `places/{place_id}` format. Can be used to look up the Place.",
          "type": "string"
        },
        "postalAddress": {
          "description": "The address in postal address format.",
          "$ref": "GoogleTypePostalAddress"
        },
        "adrFormatAddress": {
          "type": "string",
          "description": "The place's address in adr microformat: http://microformats.org/wiki/adr."
        },
        "movedPlace": {
          "description": "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.",
          "type": "string"
        },
        "menuForChildren": {
          "description": "Place has a children's menu.",
          "type": "boolean"
        },
        "priceLevel": {
          "type": "string",
          "description": "Price level of the place.",
          "enumDescriptions": [
            "Place price level is unspecified or unknown.",
            "Place provides free services.",
            "Place provides inexpensive services.",
            "Place provides moderately priced services.",
            "Place provides expensive services.",
            "Place provides very expensive services."
          ],
          "enum": [
            "PRICE_LEVEL_UNSPECIFIED",
            "PRICE_LEVEL_FREE",
            "PRICE_LEVEL_INEXPENSIVE",
            "PRICE_LEVEL_MODERATE",
            "PRICE_LEVEL_EXPENSIVE",
            "PRICE_LEVEL_VERY_EXPENSIVE"
          ]
        },
        "pureServiceAreaBusiness": {
          "description": "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.",
          "type": "boolean"
        },
        "iconBackgroundColor": {
          "description": "Background color for icon_mask in hex format, e.g. #909CE1.",
          "type": "string"
        },
        "containingPlaces": {
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceContainingPlace"
          },
          "description": "List of places in which the current place is located.",
          "type": "array"
        },
        "outdoorSeating": {
          "description": "Place provides outdoor seating.",
          "type": "boolean"
        },
        "servesCocktails": {
          "description": "Place serves cocktails.",
          "type": "boolean"
        },
        "googleMapsLinks": {
          "description": "Links to trigger different Google Maps actions.",
          "$ref": "GoogleMapsPlacesV1PlaceGoogleMapsLinks"
        },
        "takeout": {
          "description": "Specifies if the business supports takeout.",
          "type": "boolean"
        },
        "currentSecondaryOpeningHours": {
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceOpeningHours"
          },
          "description": "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.",
          "type": "array"
        },
        "formattedAddress": {
          "description": "A full, human-readable address for this place.",
          "type": "string"
        },
        "googleMapsUri": {
          "description": "A URL providing more information about this place.",
          "type": "string"
        },
        "nationalPhoneNumber": {
          "description": "A human-readable phone number for the place, in national format.",
          "type": "string"
        },
        "restroom": {
          "description": "Place has restroom.",
          "type": "boolean"
        },
        "consumerAlert": {
          "$ref": "GoogleMapsPlacesV1PlaceConsumerAlert",
          "description": "The consumer alert message for the place when we detect suspicious review activity on a business or a business violates our policies."
        },
        "viewport": {
          "$ref": "GoogleGeoTypeViewport",
          "description": "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."
        },
        "regularOpeningHours": {
          "$ref": "GoogleMapsPlacesV1PlaceOpeningHours",
          "description": "The regular hours are the hours of operation for a place on a typical schedule. 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`."
        },
        "websiteUri": {
          "type": "string",
          "description": "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."
        },
        "attributions": {
          "description": "A set of data provider that must be shown with this result.",
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceAttribution"
          },
          "type": "array"
        },
        "servesBreakfast": {
          "description": "Specifies if the place serves breakfast.",
          "type": "boolean"
        },
        "navigationPoints": {
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceNavigationPoint"
          },
          "type": "array",
          "description": "Navigation points for this destination."
        },
        "id": {
          "description": "The unique identifier of a place.",
          "type": "string"
        },
        "allowsDogs": {
          "type": "boolean",
          "description": "Place allows dogs."
        },
        "reviews": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1Review"
          },
          "description": "List of reviews about this place, sorted by relevance. A maximum of 5 reviews can be returned."
        },
        "servesVegetarianFood": {
          "type": "boolean",
          "description": "Specifies if the place serves vegetarian food."
        },
        "currentOpeningHours": {
          "$ref": "GoogleMapsPlacesV1PlaceOpeningHours",
          "description": "The hours of operation for the next seven days (including today) incorporating any special opening hours. The time period starts at midnight on the date of the request and ends at 11:59 pm six days later. If the actual opening hours are outside of this range, the opening hours will be truncated. For example, if a place is open from 10pm yesterday to 6am today, the opening hours will be truncated to 12am today to 6am today. This field includes the special_days subfield of all hours, set for dates that have exceptional hours."
        },
        "parkingOptions": {
          "$ref": "GoogleMapsPlacesV1PlaceParkingOptions",
          "description": "Options of parking provided by the place."
        },
        "movedPlaceId": {
          "type": "string",
          "description": "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."
        },
        "primaryTypeDisplayName": {
          "description": "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.",
          "$ref": "GoogleTypeLocalizedText"
        },
        "primaryType": {
          "description": "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.",
          "type": "string"
        },
        "reservable": {
          "type": "boolean",
          "description": "Specifies if the place supports reservations."
        },
        "subDestinations": {
          "type": "array",
          "description": "A list of sub-destinations related to the place.",
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceSubDestination"
          }
        },
        "servesDinner": {
          "description": "Specifies if the place serves dinner.",
          "type": "boolean"
        },
        "accessibilityOptions": {
          "description": "Information about the accessibility options a place offers.",
          "$ref": "GoogleMapsPlacesV1PlaceAccessibilityOptions"
        },
        "rating": {
          "format": "double",
          "type": "number",
          "description": "A rating between 1.0 and 5.0, based on user reviews of this place."
        },
        "transitStation": {
          "$ref": "GoogleMapsPlacesV1TransitStation",
          "description": "The transit station information for the place."
        },
        "types": {
          "description": "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",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "googleMapsTypeLabel": {
          "$ref": "GoogleTypeLocalizedText",
          "description": "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)."
        },
        "openingDate": {
          "$ref": "GoogleTypeDate",
          "description": "The date this place will open in the future. This field is only populated if the business status is FUTURE_OPENING."
        },
        "shortFormattedAddress": {
          "type": "string",
          "description": "A short, human-readable address for this place."
        },
        "regularSecondaryOpeningHours": {
          "description": "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.",
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceOpeningHours"
          },
          "type": "array"
        },
        "location": {
          "description": "The position of this place.",
          "$ref": "GoogleTypeLatLng"
        },
        "goodForChildren": {
          "description": "Place is good for children.",
          "type": "boolean"
        },
        "addressComponents": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceAddressComponent"
          },
          "description": "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."
        },
        "goodForWatchingSports": {
          "type": "boolean",
          "description": "Place is suitable for watching sports."
        },
        "fuelOptions": {
          "$ref": "GoogleMapsPlacesV1FuelOptions",
          "description": "The most recent information about fuel options in a gas station. This information is updated regularly."
        },
        "dineIn": {
          "type": "boolean",
          "description": "Specifies if the business supports indoor or outdoor seating options."
        },
        "userRatingCount": {
          "description": "The total number of reviews (with or without text) for this place.",
          "type": "integer",
          "format": "int32"
        },
        "servesBrunch": {
          "description": "Specifies if the place serves brunch.",
          "type": "boolean"
        },
        "servesWine": {
          "type": "boolean",
          "description": "Specifies if the place serves wine."
        },
        "businessStatus": {
          "enum": [
            "BUSINESS_STATUS_UNSPECIFIED",
            "OPERATIONAL",
            "CLOSED_TEMPORARILY",
            "CLOSED_PERMANENTLY",
            "FUTURE_OPENING"
          ],
          "description": "The business status for the place.",
          "enumDescriptions": [
            "Default value. This value is unused.",
            "The establishment is operational, not necessarily open now.",
            "The establishment is temporarily closed.",
            "The establishment is permanently closed.",
            "The establishment will open in the future."
          ],
          "type": "string"
        },
        "photos": {
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1Photo"
          },
          "description": "Information (including references) about photos of this place. A maximum of 10 photos can be returned."
        },
        "servesLunch": {
          "type": "boolean",
          "description": "Specifies if the place serves lunch."
        },
        "delivery": {
          "type": "boolean",
          "description": "Specifies if the business supports delivery."
        },
        "liveMusic": {
          "description": "Place provides live music.",
          "type": "boolean"
        },
        "servesBeer": {
          "description": "Specifies if the place serves beer.",
          "type": "boolean"
        }
      },
      "id": "GoogleMapsPlacesV1Place",
      "type": "object"
    },
    "GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters": {
      "id": "GoogleMapsPlacesV1SearchTextRequestSearchAlongRouteParameters",
      "properties": {
        "polyline": {
          "description": "Required. The route polyline.",
          "$ref": "GoogleMapsPlacesV1Polyline"
        }
      },
      "type": "object",
      "description": "Specifies a precalculated polyline from the [Routes API](https://developers.google.com/maps/documentation/routes) defining the route to search. Searching along a route is similar to using the `locationBias` or `locationRestriction` request option to bias the search results. However, while the `locationBias` and `locationRestriction` options let you specify a region to bias the search results, this option lets you bias the results along a trip route. Results are not guaranteed to be along the route provided, but rather are ranked within the search area defined by the polyline and, optionally, by the `locationBias` or `locationRestriction` based on minimal detour times from origin to destination. The results might be along an alternate route, especially if the provided polyline does not define an optimal route from origin to destination."
    },
    "GoogleMapsPlacesV1PlaceConsumerAlertDetailsLink": {
      "description": "The link to show together with the description to provide more information.",
      "properties": {
        "title": {
          "description": "The title to show for the link.",
          "type": "string"
        },
        "uri": {
          "type": "string",
          "description": "The uri of the link."
        }
      },
      "id": "GoogleMapsPlacesV1PlaceConsumerAlertDetailsLink",
      "type": "object"
    },
    "GoogleMapsPlacesV1Photo": {
      "description": "Information about a photo of a place.",
      "id": "GoogleMapsPlacesV1Photo",
      "properties": {
        "googleMapsUri": {
          "type": "string",
          "description": "A link to show the photo on Google Maps."
        },
        "flagContentUri": {
          "description": "A link where users can flag a problem with the photo.",
          "type": "string"
        },
        "widthPx": {
          "type": "integer",
          "description": "The maximum available width, in pixels.",
          "format": "int32"
        },
        "heightPx": {
          "format": "int32",
          "type": "integer",
          "description": "The maximum available height, in pixels."
        },
        "name": {
          "type": "string",
          "description": "Identifier. A reference representing this place photo which may be used to look up this place photo again (also called the API \"resource\" name: `places/{place_id}/photos/{photo}`)."
        },
        "authorAttributions": {
          "type": "array",
          "description": "This photo's authors.",
          "items": {
            "$ref": "GoogleMapsPlacesV1AuthorAttribution"
          }
        }
      },
      "type": "object"
    },
    "GoogleMapsPlacesV1PlaceOpeningHours": {
      "type": "object",
      "id": "GoogleMapsPlacesV1PlaceOpeningHours",
      "properties": {
        "nextOpenTime": {
          "description": "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.",
          "format": "google-datetime",
          "type": "string"
        },
        "weekdayDescriptions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "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\""
        },
        "nextCloseTime": {
          "type": "string",
          "description": "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.",
          "format": "google-datetime"
        },
        "periods": {
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceOpeningHoursPeriod"
          },
          "description": "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.",
          "type": "array"
        },
        "specialDays": {
          "items": {
            "$ref": "GoogleMapsPlacesV1PlaceOpeningHoursSpecialDay"
          },
          "type": "array",
          "description": "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."
        },
        "openNow": {
          "type": "boolean",
          "description": "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."
        },
        "secondaryHoursType": {
          "type": "string",
          "enumDescriptions": [
            "Default value when secondary hour type is not specified.",
            "The drive-through hour for banks, restaurants, or pharmacies.",
            "The happy hour.",
            "The delivery hour.",
            "The takeout hour.",
            "The kitchen hour.",
            "The breakfast hour.",
            "The lunch hour.",
            "The dinner hour.",
            "The brunch hour.",
            "The pickup hour.",
            "The access hours for storage places.",
            "The special hours for seniors.",
            "The online service hours."
          ],
          "enum": [
            "SECONDARY_HOURS_TYPE_UNSPECIFIED",
            "DRIVE_THROUGH",
            "HAPPY_HOUR",
            "DELIVERY",
            "TAKEOUT",
            "KITCHEN",
            "BREAKFAST",
            "LUNCH",
            "DINNER",
            "BRUNCH",
            "PICKUP",
            "ACCESS",
            "SENIOR_HOURS",
            "ONLINE_SERVICE_HOURS"
          ],
          "description": "A type string used to identify the type of secondary hours."
        }
      },
      "description": "Information about business hour of the place."
    },
    "GoogleMapsPlacesV1EVChargeOptionsConnectorAggregation": {
      "id": "GoogleMapsPlacesV1EVChargeOptionsConnectorAggregation",
      "type": "object",
      "properties": {
        "count": {
          "description": "Number of connectors in this aggregation.",
          "type": "integer",
          "format": "int32"
        },
        "outOfServiceCount": {
          "description": "Number of connectors in this aggregation that are currently out of service.",
          "type": "integer",
          "format": "int32"
        },
        "availabilityLastUpdateTime": {
          "format": "google-datetime",
          "description": "The timestamp when the connector availability information in this aggregation was last updated.",
          "type": "string"
        },
        "maxChargeRateKw": {
          "type": "number",
          "description": "The static max charging rate in kw of each connector in the aggregation.",
          "format": "double"
        },
        "type": {
          "type": "string",
          "description": "The connector type of this aggregation.",
          "enum": [
            "EV_CONNECTOR_TYPE_UNSPECIFIED",
            "EV_CONNECTOR_TYPE_OTHER",
            "EV_CONNECTOR_TYPE_J1772",
            "EV_CONNECTOR_TYPE_TYPE_2",
            "EV_CONNECTOR_TYPE_CHADEMO",
            "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "EV_CONNECTOR_TYPE_CCS_COMBO_2",
            "EV_CONNECTOR_TYPE_TESLA",
            "EV_CONNECTOR_TYPE_UNSPECIFIED_GB_T",
            "EV_CONNECTOR_TYPE_UNSPECIFIED_WALL_OUTLET",
            "EV_CONNECTOR_TYPE_NACS"
          ],
          "enumDescriptions": [
            "Unspecified connector.",
            "Other connector types.",
            "J1772 type 1 connector.",
            "IEC 62196 type 2 connector. Often referred to as MENNEKES.",
            "CHAdeMO type connector.",
            "Combined Charging System (AC and DC). Based on SAE. Type-1 J-1772 connector",
            "Combined Charging System (AC and DC). Based on Type-2 Mennekes connector",
            "The generic TESLA connector. This is NACS in the North America but can be non-NACS in other parts of the world (e.g. CCS Combo 2 (CCS2) or GB/T). This value is less representative of an actual connector type, and more represents the ability to charge a Tesla brand vehicle at a Tesla owned charging station.",
            "GB/T type corresponds to the GB/T standard in China. This type covers all GB_T types.",
            "Unspecified wall outlet.",
            "The North American Charging System (NACS), standardized as SAE J3400."
          ]
        },
        "availableCount": {
          "description": "Number of connectors in this aggregation that are currently available.",
          "format": "int32",
          "type": "integer"
        }
      },
      "description": "EV charging information grouped by [type, max_charge_rate_kw]. Shows EV charge aggregation of connectors that have the same type and max charge rate in kw."
    },
    "GoogleMapsPlacesV1PlacePaymentOptions": {
      "type": "object",
      "id": "GoogleMapsPlacesV1PlacePaymentOptions",
      "description": "Payment options the place accepts.",
      "properties": {
        "acceptsCashOnly": {
          "description": "Place accepts cash only as payment. Places with this attribute may still accept other payment methods.",
          "type": "boolean"
        },
        "acceptsDebitCards": {
          "description": "Place accepts debit cards as payment.",
          "type": "boolean"
        },
        "acceptsNfc": {
          "description": "Place accepts NFC payments.",
          "type": "boolean"
        },
        "acceptsCreditCards": {
          "description": "Place accepts credit cards as payment.",
          "type": "boolean"
        }
      }
    },
    "GoogleMapsPlacesV1RoutingParameters": {
      "description": "Parameters to configure the routing calculations to the places in the response, both along a route (where result ranking will be influenced) and for calculating travel times on results.",
      "properties": {
        "routeModifiers": {
          "$ref": "GoogleMapsPlacesV1RouteModifiers",
          "description": "Optional. The route modifiers."
        },
        "travelMode": {
          "type": "string",
          "enumDescriptions": [
            "No travel mode specified. Defaults to `DRIVE`.",
            "Travel by passenger car.",
            "Travel by bicycle. Not supported with `search_along_route_parameters`.",
            "Travel by walking. Not supported with `search_along_route_parameters`.",
            "Motorized two wheeled vehicles of all kinds such as scooters and motorcycles. Note that this is distinct from the `BICYCLE` travel mode which covers human-powered transport. Not supported with `search_along_route_parameters`. Only supported in those countries listed at [Countries and regions supported for two-wheeled vehicles](https://developers.google.com/maps/documentation/routes/coverage-two-wheeled)."
          ],
          "enum": [
            "TRAVEL_MODE_UNSPECIFIED",
            "DRIVE",
            "BICYCLE",
            "WALK",
            "TWO_WHEELER"
          ],
          "description": "Optional. The travel mode."
        },
        "routingPreference": {
          "enum": [
            "ROUTING_PREFERENCE_UNSPECIFIED",
            "TRAFFIC_UNAWARE",
            "TRAFFIC_AWARE",
            "TRAFFIC_AWARE_OPTIMAL"
          ],
          "description": "Optional. Specifies how to compute the routing summaries. The server attempts to use the selected routing preference to compute the route. The traffic aware routing preference is only available for the `DRIVE` or `TWO_WHEELER` `travelMode`.",
          "type": "string",
          "enumDescriptions": [
            "No routing preference specified. Default to `TRAFFIC_UNAWARE`.",
            "Computes routes without taking live traffic conditions into consideration. Suitable when traffic conditions don't matter or are not applicable. Using this value produces the lowest latency. Note: For `TravelMode` `DRIVE` and `TWO_WHEELER`, the route and duration chosen are based on road network and average time-independent traffic conditions, not current road conditions. Consequently, routes may include roads that are temporarily closed. Results for a given request may vary over time due to changes in the road network, updated average traffic conditions, and the distributed nature of the service. Results may also vary between nearly-equivalent routes at any time or frequency.",
            "Calculates routes taking live traffic conditions into consideration. In contrast to `TRAFFIC_AWARE_OPTIMAL`, some optimizations are applied to significantly reduce latency.",
            "Calculates the routes taking live traffic conditions into consideration, without applying most performance optimizations. Using this value produces the highest latency."
          ]
        },
        "origin": {
          "$ref": "GoogleTypeLatLng",
          "description": "Optional. An explicit routing origin that overrides the origin defined in the polyline. By default, the polyline origin is used."
        }
      },
      "id": "GoogleMapsPlacesV1RoutingParameters",
      "type": "object"
    },
    "GoogleMapsPlacesV1SearchNearbyResponse": {
      "id": "GoogleMapsPlacesV1SearchNearbyResponse",
      "properties": {
        "places": {
          "description": "A list of places that meets user's requirements like places types, number of places and specific location restriction.",
          "type": "array",
          "items": {
            "$ref": "GoogleMapsPlacesV1Place"
          }
        },
        "routingSummaries": {
          "items": {
            "$ref": "GoogleMapsPlacesV1RoutingSummary"
          },
          "description": "A list of routing summaries where each entry associates to the corresponding place in the same index in the `places` field. If the routing summary is not available for one of the places, it will contain an empty entry. This list should have as many entries as the list of places if requested.",
          "type": "array"
        }
      },
      "type": "object",
      "description": "Response proto for Search Nearby. "
    },
    "GoogleMapsPlacesV1PlaceOpeningHoursSpecialDay": {
      "id": "GoogleMapsPlacesV1PlaceOpeningHoursSpecialDay",
      "description": "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.",
      "type": "object",
      "properties": {
        "date": {
          "$ref": "GoogleTypeDate",
          "description": "The date of this special day."
        }
      }
    }
  },
  "description": "The Places API allows developers to access a variety of search and retrieval endpoints for a Place.",
  "name": "places",
  "kind": "discovery#restDescription",
  "rootUrl": "https://places.googleapis.com/",
  "title": "Places API (New)",
  "baseUrl": "https://places.googleapis.com/",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/maps-platform.places.nearbysearch": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places.nearbysearch"
        },
        "https://www.googleapis.com/auth/maps-platform.places.autocomplete": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places.autocomplete"
        },
        "https://www.googleapis.com/auth/maps-platform.places.details": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places.details"
        },
        "https://www.googleapis.com/auth/maps-platform.places.textsearch": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places.textsearch"
        },
        "https://www.googleapis.com/auth/maps-platform.places.getphotomedia": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places.getphotomedia"
        },
        "https://www.googleapis.com/auth/maps-platform.places": {
          "description": "Private Service: https://www.googleapis.com/auth/maps-platform.places"
        },
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "canonicalName": "Maps Places",
  "version_module": true,
  "revision": "20261111",
  "discoveryVersion": "v1",
  "parameters": {
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query",
      "type": "string"
    },
    "callback": {
      "location": "query",
      "description": "JSONP",
      "type": "string"
    },
    "oauth_token": {
      "description": "OAuth 2.0 token for the current user.",
      "type": "string",
      "location": "query"
    },
    "uploadType": {
      "location": "query",
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
    },
    "quotaUser": {
      "location": "query",
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
    },
    "access_token": {
      "description": "OAuth access token.",
      "location": "query",
      "type": "string"
    },
    "prettyPrint": {
      "location": "query",
      "default": "true",
      "type": "boolean",
      "description": "Returns response with indentations and line breaks."
    },
    "upload_protocol": {
      "location": "query",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "type": "string"
    },
    "alt": {
      "description": "Data format for response.",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "type": "string",
      "location": "query",
      "default": "json"
    },
    "key": {
      "location": "query",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "type": "string"
    },
    "$.xgafv": {
      "description": "V1 error format.",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query",
      "type": "string",
      "enum": [
        "1",
        "2"
      ]
    }
  },
  "basePath": "",
  "ownerName": "Google",
  "documentationLink": "https://developers.google.com/maps/documentation/places/web-service",
  "servicePath": "",
  "mtlsRootUrl": "https://places.mtls.googleapis.com/",
  "id": "places:v1",
  "resources": {
    "places": {
      "methods": {
        "searchText": {
          "description": "Text query based place search.",
          "httpMethod": "POST",
          "parameterOrder": [],
          "response": {
            "$ref": "GoogleMapsPlacesV1SearchTextResponse"
          },
          "request": {
            "$ref": "GoogleMapsPlacesV1SearchTextRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/maps-platform.places",
            "https://www.googleapis.com/auth/maps-platform.places.textsearch"
          ],
          "id": "places.places.searchText",
          "parameters": {},
          "flatPath": "v1/places:searchText",
          "path": "v1/places:searchText"
        },
        "searchNearby": {
          "flatPath": "v1/places:searchNearby",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/maps-platform.places",
            "https://www.googleapis.com/auth/maps-platform.places.nearbysearch"
          ],
          "response": {
            "$ref": "GoogleMapsPlacesV1SearchNearbyResponse"
          },
          "description": "Search for places near locations.",
          "path": "v1/places:searchNearby",
          "request": {
            "$ref": "GoogleMapsPlacesV1SearchNearbyRequest"
          },
          "id": "places.places.searchNearby"
        },
        "autocomplete": {
          "path": "v1/places:autocomplete",
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/maps-platform.places",
            "https://www.googleapis.com/auth/maps-platform.places.autocomplete"
          ],
          "flatPath": "v1/places:autocomplete",
          "id": "places.places.autocomplete",
          "httpMethod": "POST",
          "response": {
            "$ref": "GoogleMapsPlacesV1AutocompletePlacesResponse"
          },
          "description": "Returns predictions for the given input.",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleMapsPlacesV1AutocompletePlacesRequest"
          }
        },
        "get": {
          "path": "v1/{+name}",
          "httpMethod": "GET",
          "description": "Get the details of a place based on its resource name, which is a string in the `places/{place_id}` format.",
          "parameters": {
            "name": {
              "pattern": "^places/[^/]+$",
              "type": "string",
              "required": true,
              "location": "path",
              "description": "Required. The resource name of a place, in the `places/{place_id}` format."
            },
            "languageCode": {
              "location": "query",
              "type": "string",
              "description": "Optional. Place details will be displayed with the preferred language if available. Current list of supported languages: https://developers.google.com/maps/faq#languagesupport."
            },
            "sessionToken": {
              "type": "string",
              "description": "Optional. A string which identifies an Autocomplete session for billing purposes. Must be a URL and filename safe base64 string with at most 36 ASCII characters in length. Otherwise an INVALID_ARGUMENT error is returned. The session begins when the user starts typing a query, and concludes when they select a place and a call to Place Details or Address Validation is made. Each session can have multiple queries, followed by one Place Details or Address Validation request. The credentials used for each request within a session must belong to the same Google Cloud Console project. Once a session has concluded, the token is no longer valid; your app must generate a fresh token for each session. If the `session_token` parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided (each request is billed separately). We recommend the following guidelines: * Use session tokens for all Place Autocomplete calls. * Generate a fresh token for each session. Using a version 4 UUID is recommended. * Ensure that the credentials used for all Place Autocomplete, Place Details, and Address Validation requests within a session belong to the same Cloud Console project. * Be sure to pass a unique session token for each new session. Using the same token for more than one session will result in each request being billed individually.",
              "location": "query"
            },
            "regionCode": {
              "type": "string",
              "location": "query",
              "description": "Optional. The Unicode country/region code (CLDR) of the location where the request is coming from. This parameter is used to display the place details, like region-specific place name, if available. The parameter can affect results based on applicable law. For more information, see https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html. Note that 3-digit region codes are not currently supported."
            }
          },
          "flatPath": "v1/places/{placesId}",
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform",
            "https://www.googleapis.com/auth/maps-platform.places",
            "https://www.googleapis.com/auth/maps-platform.places.details"
          ],
          "parameterOrder": [
            "name"
          ],
          "id": "places.places.get",
          "response": {
            "$ref": "GoogleMapsPlacesV1Place"
          }
        }
      },
      "resources": {
        "photos": {
          "methods": {
            "getMedia": {
              "parameters": {
                "name": {
                  "location": "path",
                  "description": "Required. The resource name of a photo media in the format: `places/{place_id}/photos/{photo_reference}/media`. The resource name of a photo as returned in a Place object's `photos.name` field comes with the format `places/{place_id}/photos/{photo_reference}`. You need to append `/media` at the end of the photo resource to get the photo media resource name.",
                  "required": true,
                  "pattern": "^places/[^/]+/photos/[^/]+/media$",
                  "type": "string"
                },
                "skipHttpRedirect": {
                  "location": "query",
                  "description": "Optional. If set, skip the default HTTP redirect behavior and render a text format (for example, in JSON format for HTTP use case) response. If not set, an HTTP redirect will be issued to redirect the call to the image media. This option is ignored for non-HTTP requests.",
                  "type": "boolean"
                },
                "maxHeightPx": {
                  "type": "integer",
                  "format": "int32",
                  "location": "query",
                  "description": "Optional. Specifies the maximum desired height, in pixels, of the image. If the image is smaller than the values specified, the original image will be returned. If the image is larger in either dimension, it will be scaled to match the smaller of the two dimensions, restricted to its original aspect ratio. Both the max_height_px and max_width_px properties accept an integer between 1 and 4800, inclusively. If the value is not within the allowed range, an INVALID_ARGUMENT error will be returned. At least one of max_height_px or max_width_px needs to be specified. If neither max_height_px nor max_width_px is specified, an INVALID_ARGUMENT error will be returned."
                },
                "maxWidthPx": {
                  "location": "query",
                  "description": "Optional. Specifies the maximum desired width, in pixels, of the image. If the image is smaller than the values specified, the original image will be returned. If the image is larger in either dimension, it will be scaled to match the smaller of the two dimensions, restricted to its original aspect ratio. Both the max_height_px and max_width_px properties accept an integer between 1 and 4800, inclusively. If the value is not within the allowed range, an INVALID_ARGUMENT error will be returned. At least one of max_height_px or max_width_px needs to be specified. If neither max_height_px nor max_width_px is specified, an INVALID_ARGUMENT error will be returned.",
                  "format": "int32",
                  "type": "integer"
                }
              },
              "flatPath": "v1/places/{placesId}/photos/{photosId}/media",
              "description": "Get a photo media with a photo reference string.",
              "path": "v1/{+name}",
              "httpMethod": "GET",
              "parameterOrder": [
                "name"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform",
                "https://www.googleapis.com/auth/maps-platform.places",
                "https://www.googleapis.com/auth/maps-platform.places.getphotomedia"
              ],
              "response": {
                "$ref": "GoogleMapsPlacesV1PhotoMedia"
              },
              "id": "places.places.photos.getMedia"
            }
          }
        }
      }
    }
  },
  "batchPath": "batch",
  "ownerDomain": "google.com",
  "fullyEncodeReservedExpansion": true,
  "version": "v1",
  "protocol": "rest"
}
