// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.maps.weather.v1; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/maps/weather/v1/air_pressure.proto"; import "google/maps/weather/v1/forecast_day.proto"; import "google/maps/weather/v1/forecast_hour.proto"; import "google/maps/weather/v1/forecast_minute.proto"; import "google/maps/weather/v1/history_hour.proto"; import "google/maps/weather/v1/map_types.proto"; import "google/maps/weather/v1/precipitation.proto"; import "google/maps/weather/v1/public_alerts.proto"; import "google/maps/weather/v1/temperature.proto"; import "google/maps/weather/v1/units_system.proto"; import "google/maps/weather/v1/visibility.proto"; import "google/maps/weather/v1/weather_condition.proto"; import "google/maps/weather/v1/wind.proto"; import "google/protobuf/timestamp.proto"; import "google/type/datetime.proto"; import "google/type/interval.proto"; import "google/type/latlng.proto"; option csharp_namespace = "Google.Geo.Weather.V1"; option go_package = "cloud.google.com/go/maps/weather/apiv1/weatherpb;weatherpb"; option java_multiple_files = true; option java_outer_classname = "WeatherServiceProto"; option java_package = "com.google.maps.weather.v1"; option objc_class_prefix = "GMWV1"; option php_namespace = "Google\\Geo\\Weather\\V1"; // Service definition for the Weather API. service Weather { option (google.api.default_host) = "weather.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; // Returns the current weather conditions at a given location. rpc LookupCurrentConditions(LookupCurrentConditionsRequest) returns (LookupCurrentConditionsResponse) { option (google.api.http) = { get: "/v1/currentConditions:lookup" }; } // Returns up to 240 hours of hourly forecasts at a given location, starting // from the current hour. rpc LookupForecastHours(LookupForecastHoursRequest) returns (LookupForecastHoursResponse) { option (google.api.http) = { get: "/v1/forecast/hours:lookup" }; } // Returns up to 10 days of daily forecasts at a given location, starting from // the current day. rpc LookupForecastDays(LookupForecastDaysRequest) returns (LookupForecastDaysResponse) { option (google.api.http) = { get: "/v1/forecast/days:lookup" }; } // Returns up to 24 hours of hourly historical weather data at a given // location, starting from the last hour. rpc LookupHistoryHours(LookupHistoryHoursRequest) returns (LookupHistoryHoursResponse) { option (google.api.http) = { get: "/v1/history/hours:lookup" }; } // Returns public weather alerts for a given location. rpc LookupPublicAlerts(LookupPublicAlertsRequest) returns (LookupPublicAlertsResponse) { option (google.api.http) = { get: "/v1/publicAlerts:lookup" }; } // Returns minute-level precipitation nowcast events for up to 6 hours. rpc LookupForecastMinutes(LookupForecastMinutesRequest) returns (LookupForecastMinutesResponse) { option (google.api.http) = { get: "/v1/forecast/minutes:lookup" }; } } // Request for the LookupCurrentConditions RPC. message LookupCurrentConditionsRequest { // Required. The location to get the current weather conditions for. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. The units system to use for the returned weather conditions. If // not provided, the returned weather conditions will be in the metric system // (default = METRIC). UnitsSystem units_system = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. Allows the client to choose the language for the response. If // data cannot be provided for that language, the API uses the closest match. // Allowed values rely on the IETF BCP-47 standard. The default value is "en". optional string language_code = 3 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupCurrentConditions RPC - represents the current weather // conditions at the requested location. message LookupCurrentConditionsResponse { // Represents a set of changes in the current conditions over the last 24 // hours. message CurrentConditionsHistory { // The current temperature minus the temperature 24 hours ago. Temperature temperature_change = 1; // The maximum (high) temperature in the past 24 hours. Temperature max_temperature = 2; // The minimum (low) temperature in the past 24 hours. Temperature min_temperature = 3; // The amount of snow, measured as liquid water equivalent, // that has accumulated over the last 24 hours. // Note: QPF is an abbreviation for Quantitative Precipitation Forecast // (please see the QuantitativePrecipitationForecast definition for more // details). QuantitativePrecipitationForecast snow_qpf = 5; // The amount of rain, measured as liquid water equivalent, that has // accumulated over the last 24 hours. Note: QPF is an abbreviation for // Quantitative Precipitation Forecast (please see the // QuantitativePrecipitationForecast definition for more details). QuantitativePrecipitationForecast qpf = 6; } // Current time (UTC) associated with the returned data. google.protobuf.Timestamp current_time = 1; // The time zone at the requested location. google.type.TimeZone time_zone = 2; // True if the current time at the requested location is between the local // sunrise (inclusive) and the sunset (exclusive) times. Otherwise, it is // nighttime (between the sunset and the next sunrise). optional bool is_daytime = 3; // The current weather condition. WeatherCondition weather_condition = 4; // The current temperature. Temperature temperature = 5; // The measure of how the temperature currently feels like at the requested // location. Temperature feels_like_temperature = 6; // The current dew point temperature. Temperature dew_point = 7; // The current heat index temperature. Temperature heat_index = 8; // The current wind chill, air temperature exposed on the skin. Temperature wind_chill = 9; // The current percent of relative humidity (values from 0 to 100). optional int32 relative_humidity = 10; // The current ultraviolet (UV) index. optional int32 uv_index = 11; // The current precipitation probability and amount of precipitation // accumulated over the last hour. Precipitation precipitation = 12; // The current thunderstorm probability (values from 0 to 100). optional int32 thunderstorm_probability = 13; // The current air pressure conditions. AirPressure air_pressure = 14; // The current wind conditions. Wind wind = 15; // The current visibility. Visibility visibility = 16; // The current percentage of the sky covered by clouds (values from 0 to 100). optional int32 cloud_cover = 17; // The changes in the current conditions over the last 24 hours. CurrentConditionsHistory current_conditions_history = 18; } // Request for the LookupForecastHours RPC. message LookupForecastHoursRequest { // Required. The location to get the hourly forecast for. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. Limits the amount of total hours to fetch starting from the // current hour - a value from 1 to 240 (inclusive). The default is the // maximum allowed value of 240. optional int32 hours = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. The units system to use for the returned weather conditions. If // not provided, the returned weather conditions will be in the metric system // (default = METRIC). UnitsSystem units_system = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. Allows the client to choose the language for the response. If // data cannot be provided for that language, the API uses the closest match. // Allowed values rely on the IETF BCP-47 standard. The default value is "en". optional string language_code = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. The maximum number of hourly forecast records to return per page // - a value from 1 to 24 (inclusive). The default is the maximum allowed // value of 24. int32 page_size = 5 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token received from a previous request. It is used to // retrieve the subsequent page. string page_token = 6 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupForecastHours RPC. message LookupForecastHoursResponse { // The hourly forecast records, according to the number of hours and page size // specified in the request. repeated ForecastHour forecast_hours = 1; // The time zone at the requested location. google.type.TimeZone time_zone = 2; // The token to retrieve the next page. string next_page_token = 3; } // Request for the LookupForecastDays RPC. message LookupForecastDaysRequest { // Required. The location to get the daily forecast for. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. Limits the amount of total days to fetch starting from the // current day - a value from 1 to 10 (inclusive). The default value is the // maximum allowed value of 10. optional int32 days = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. The units system to use for the returned weather conditions. If // not provided, the returned weather conditions will be in the metric system // (default = METRIC). UnitsSystem units_system = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. Allows the client to choose the language for the response. If // data cannot be provided for that language, the API uses the closest match. // Allowed values rely on the IETF BCP-47 standard. The default value is "en". optional string language_code = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. The maximum number of daily forecast records to return per page - // a value from 1 to 10 (inclusive). The default value is 5. int32 page_size = 5 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token received from a previous request. It is used to // retrieve the subsequent page. string page_token = 6 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupForecastDays RPC. message LookupForecastDaysResponse { // The daily forecast records, according to the number of days and page size // specified in the request. repeated ForecastDay forecast_days = 1; // The time zone at the requested location. google.type.TimeZone time_zone = 2; // The token to retrieve the next page. string next_page_token = 3; } // Request for the LookupHistoryHours RPC. message LookupHistoryHoursRequest { // Required. The location to get the hourly historical data for. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. Limits the amount of total hours to fetch starting from the last // hour - a from 1 to 24 (inclusive). The default is the maximum allowed value // of 24. optional int32 hours = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. The units system to use for the returned weather conditions. If // not provided, the returned weather conditions will be in the metric system // (default = METRIC). UnitsSystem units_system = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. Allows the client to choose the language for the response. If // data cannot be provided for that language, the API uses the closest match. // Allowed values rely on the IETF BCP-47 standard. The default value is "en". optional string language_code = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. The maximum number of hourly historical records to return per // page - a value from 1 to 24 (inclusive). The default is the maximum allowed // value of 24. int32 page_size = 5 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token received from a previous request. It is used to // retrieve the subsequent page. string page_token = 6 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupHistoryHours RPC. message LookupHistoryHoursResponse { // The hourly historical records, according to the number of hours and page // size specified in the request. repeated HistoryHour history_hours = 1; // The time zone at the requested location. google.type.TimeZone time_zone = 2; // The token to retrieve the next page. string next_page_token = 3; } // Request for the LookupPublicAlerts RPC. message LookupPublicAlertsRequest { // Required. The location to get public weather alerts for. The service will // return alerts whose affected area intersects with this location. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. Allows the client to choose the language for the response. If // data cannot be provided for that language, the API uses the closest match. // Allowed values rely on the IETF BCP-47 standard. The default value is "en". optional string language_code = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. The maximum number of public weather alert records to return per // page. int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token received from a previous // `LookupPublicAlerts` call. Provide this to retrieve the subsequent // page. When paginating, all other parameters provided to // `LookupPublicAlerts` must match the call that provided the page // token. string page_token = 4 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupPublicAlerts RPC. message LookupPublicAlertsResponse { // The public weather alert records, according to the number of alerts and // page size specified in the request. repeated PublicAlerts weather_alerts = 1; // The ISO_3166-1 alpha-2 code of the region corresponding to the // location provided in the request. The region is stated using // ISO_3166-1_alpha-2. string region_code = 2; // A token that can be sent as `page_token` to retrieve the next page. // If this field is omitted, there are no subsequent pages. string next_page_token = 3; } // Request for the LookupForecastMinutes RPC. message LookupForecastMinutesRequest { // The location to get the minutely forecast for. google.type.LatLng location = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. The units system to use for the returned weather conditions. If // not provided, the returned weather conditions will be in the metric system // (default = METRIC). UnitsSystem units_system = 2 [(google.api.field_behavior) = OPTIONAL]; reserved 3; reserved "language_code"; // Optional. The maximum number of forecast records to return per page. int32 page_size = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token received from a previous request. It is used to // retrieve the subsequent page. string page_token = 5 [(google.api.field_behavior) = OPTIONAL]; } // Response for the LookupForecastMinutes RPC. message LookupForecastMinutesResponse { reserved 1; reserved "events"; // The overall timeframe for the predictions. google.type.Interval overall_prediction_timeframe = 2; // The time zone at the requested location. google.type.TimeZone time_zone = 3; // The token to retrieve the next page. string next_page_token = 4; // The minute-level prediction segments. repeated PrecipitationSegment segments = 5; } // (-- Request for the LookupMapTile RPC. --) message LookupMapTileRequest { reserved 1; // The type of the weather map. Defines the weather event that the // map will graphically represent. // // Allowed values: // - US_PRECIPITATION_CURRENT - US precipitation current map. // - EU_PRECIPITATION_CURRENT - EU precipitation current map. MapType map_type = 2 [(google.api.field_behavior) = REQUIRED]; // The map's zoom level. Defines how large or small the contents // of a map appear in a map view. // // Zoom level 0 is the entire world in a single tile. // Zoom level 1 is the entire world in 4 tiles. // Zoom level 2 is the entire world in 16 tiles. // Zoom level 16 is the entire world in 65,536 tiles. // // Allowed values: 0-16 // (-- api-linter: core::0203::required-and-optional=disabled // aip.dev/not-precedent: this field needs to keep presence. --) int32 zoom = 3 [(google.api.field_behavior) = REQUIRED]; // Defines the east-west point in the requested tile. // (-- api-linter: core::0203::required-and-optional=disabled // aip.dev/not-precedent: this field needs to keep presence. --) int32 x = 4 [(google.api.field_behavior) = REQUIRED]; // Defines the north-south point in the requested tile. // (-- api-linter: core::0203::required-and-optional=disabled // aip.dev/not-precedent: this field needs to keep presence. --) int32 y = 5 [(google.api.field_behavior) = REQUIRED]; }