> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.silurian.ai/api-reference/weather/past/forecast/hourly/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.silurian.ai/_mcp/server. # Get Hourly Forecast GET https://earth.weather.silurian.ai/api/v1/past/forecast/hourly Get hourly weather forecast for a specific location and time Reference: https://docs.silurian.ai/api-reference/weather/past/forecast/hourly ## Authentication - `X-API-KEY` header (required) — API Key authentication via header ## Request ### Query parameters - `latitude` (double, required) - `longitude` (double, required) - `time` (datetime, required) - `timezone` (enum, optional) - Allowed values: `local`, `utc` - `units` (enum, optional) - Allowed values: `metric`, `imperial` ## Response ### 200 Successful Response - `latitude` (double, required) - `longitude` (double, required) - `forecast_time` (datetime, required) - `timezone` (string, required) - `utc_offset` (integer, required) - `units` (HourlyWeatherResponseUnits, required) - `hourly` (list of HourlyConditions, required) - `elevation` (integer, optional) ## Errors ### 401 Forecast Hourly Request Unauthorized Error Unauthorized - `any` ### 404 Forecast Hourly Request Not Found Error Not Found - `any` ### 422 Forecast Hourly Request Unprocessable Entity Error Validation Error - `any` ### 500 Forecast Hourly Request Internal Server Error Internal Server Error - `any` ## Types ### HourlyWeatherResponseUnits ### HourlyConditions - `timestamp` (datetime, required) - `temperature` (double, optional) - `precipitation_accumulation` (double, optional) - `precipitation_probability` (integer, optional) - `precipitation_type` (enum, optional) - Allowed values: `liquid`, `snow`, `hail`, `sleet`, `freezing_rain` - `snowfall_accumulation` (double, optional) - `cloud_cover` (integer, optional) - `humidity` (integer, optional) - `wind_speed` (double, optional) - `wind_direction` (double, optional) - `dewpoint_temperature` (double, optional) - `pressure` (double, optional) - `downward_solar_radiation` (double, optional) - `wind_speed_100m` (double, optional) - `wind_direction_100m` (double, optional) - `feels_like_temperature` (double, optional) - `weather_code` (enum, optional) - Allowed values: `clear-night`, `clear-day`, `partly-cloudy-day`, `partly-cloudy-night`, `cloudy`, `rain`, `snow` - `global_horizontal_irradiation` (double, optional) - `direct_normal_irradiation` (double, optional) - `diffuse_horizontal_irradiation` (double, optional) ### MetricUnits - `elevation` (string, optional, default: m) - `temperature` (string, optional, default: °C) - `feels_like_temperature` (string, optional, default: °C) - `precipitation_accumulation` (string, optional, default: mm) - `precipitation_probability` (string, optional, default: %) - `snowfall_accumulation` (string, optional, default: mm) - `cloud_cover` (string, optional, default: %) - `humidity` (string, optional, default: %) - `wind_speed` (string, optional, default: m/s) - `wind_direction` (string, optional, default: °) - `dewpoint_temperature` (string, optional, default: °C) - `pressure` (string, optional, default: hPa) - `downward_solar_radiation` (string, optional, default: kJ/m²) - `wind_speed_100m` (string, optional, default: m/s) - `wind_direction_100m` (string, optional, default: °) - `global_horizontal_irradiation` (string, optional, default: kWh/m²) - `direct_normal_irradiation` (string, optional, default: kWh/m²) - `diffuse_horizontal_irradiation` (string, optional, default: kWh/m²) ### ImperialUnits - `elevation` (string, optional, default: ft) - `temperature` (string, optional, default: °F) - `feels_like_temperature` (string, optional, default: °F) - `precipitation_accumulation` (string, optional, default: in) - `precipitation_probability` (string, optional, default: %) - `snowfall_accumulation` (string, optional, default: in) - `cloud_cover` (string, optional, default: %) - `humidity` (string, optional, default: %) - `wind_speed` (string, optional, default: mph) - `wind_direction` (string, optional, default: °) - `dewpoint_temperature` (string, optional, default: °F) - `pressure` (string, optional, default: mb) - `downward_solar_radiation` (string, optional, default: BTU/ft²) - `wind_speed_100m` (string, optional, default: mph) - `wind_direction_100m` (string, optional, default: °) - `global_horizontal_irradiation` (string, optional, default: BTU/ft²) - `direct_normal_irradiation` (string, optional, default: BTU/ft²) - `diffuse_horizontal_irradiation` (string, optional, default: BTU/ft²) ## Examples **Request** ```json {} ``` **Response** ```json { "latitude": 47.6061, "longitude": -122.3328, "forecast_time": "2024-01-15T09:30:00Z", "timezone": "America/Los_Angeles", "utc_offset": -28800, "units": { "elevation": "m", "temperature": "°C", "feels_like_temperature": "°C", "precipitation_accumulation": "mm", "precipitation_probability": "%", "snowfall_accumulation": "mm", "cloud_cover": "%", "humidity": "%", "wind_speed": "m/s", "wind_direction": "°", "dewpoint_temperature": "°C", "pressure": "hPa", "downward_solar_radiation": "kJ/m²", "wind_speed_100m": "m/s", "wind_direction_100m": "°", "global_horizontal_irradiation": "kWh/m²", "direct_normal_irradiation": "kWh/m²", "diffuse_horizontal_irradiation": "kWh/m²" }, "hourly": [ { "timestamp": "2024-01-15T09:30:00Z", "temperature": 5.4, "precipitation_accumulation": 0, "precipitation_probability": 10, "precipitation_type": "liquid", "snowfall_accumulation": 0, "cloud_cover": 20, "humidity": 60, "wind_speed": 3.5, "wind_direction": 180, "dewpoint_temperature": 2.1, "pressure": 1015.3, "downward_solar_radiation": 850, "wind_speed_100m": 7.2, "wind_direction_100m": 170, "feels_like_temperature": 4.8, "weather_code": "clear-day", "global_horizontal_irradiation": 12000, "direct_normal_irradiation": 11500, "diffuse_horizontal_irradiation": 3000 } ], "elevation": 53 } ``` **SDK Code** ```python import requests url = "https://earth.weather.silurian.ai/api/v1/past/forecast/hourly" querystring = {"latitude":"47.6061","longitude":"-122.3328","time":"2024-01-15T09:30:00Z","timezone":"local","units":"metric"} payload = {} headers = { "X-API-KEY": "", "Content-Type": "application/json" } response = requests.get(url, json=payload, headers=headers, params=querystring) print(response.json()) ``` ```javascript const url = 'https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric'; const options = { method: 'GET', headers: {'X-API-KEY': '', 'Content-Type': 'application/json'}, body: '{}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric" payload := strings.NewReader("{}") req, _ := http.NewRequest("GET", url, payload) req.Header.Add("X-API-KEY", "") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["X-API-KEY"] = '' request["Content-Type"] = 'application/json' request.body = "{}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric") .header("X-API-KEY", "") .header("Content-Type", "application/json") .body("{}") .asString(); ``` ```php request('GET', 'https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric', [ 'body' => '{}', 'headers' => [ 'Content-Type' => 'application/json', 'X-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric"); var request = new RestRequest(Method.GET); request.AddHeader("X-API-KEY", ""); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "X-API-KEY": "", "Content-Type": "application/json" ] let parameters = [] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://earth.weather.silurian.ai/api/v1/past/forecast/hourly?latitude=47.6061&longitude=-122.3328&time=2024-01-15T09%3A30%3A00Z&timezone=local&units=metric")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```