---
title: Time Series Weather API Reference
version: 1.0.0
description: Pull historical weather data across a date range for a single location. Requires startDate and endDate with a range up to 90 days for daily precision or 7 days for hourly precision. Accepts location by city name, GPS coordinates, or IP address. Returns daily or hourly data keyed by date in an object, with each date containing temperature max/min/mean, precipitation, wind speed and gusts, cloud cover, relative humidity, pressure, dew point, shortwave radiation, and evapotranspiration data plus astronomy information (sunrise/sunset, moon phase). All dates must be in the past (1940 onwards).
openapi: 3.1.1
servers:
  - https://api.apifreaks.com/v1.0/weather
paths: 1
operations: 1
schemas: 11
---

## Table of Contents

- [Time Series Weather API Reference v1.0.0](#time-series-weather-api-reference-v100)
  - [Authentication](#authentication)
  - [Weather APIs](#weather-apis)
    - [getTimeSeriesData](#gettimeseriesdata)
      - [Parameters](#parameters)
      - [Responses](#responses)
  - [Schemas](#schemas)
    - [TimeSeriesResponse](#timeseriesresponse)
    - [LocationByCoordinates](#locationbycoordinates)
    - [LocationByIP](#locationbyip)
    - [LocationByAddress](#locationbyaddress)
    - [HistoricalDaily](#historicaldaily)
    - [HistoricalHourly](#historicalhourly)
    - [Astronomy](#astronomy)
    - [ErrorResponse](#errorresponse)
    - [WeatherLocation](#weatherlocation)
    - [TimeSeriesDay](#timeseriesday)
    - [TimeSeriesData](#timeseriesdata)



# Time Series Weather API Reference v1.0.0

Pull historical weather data across a date range for a single location. Requires startDate and endDate with a range up to 90 days for daily precision or 7 days for hourly precision. Accepts location by city name, GPS coordinates, or IP address. Returns daily or hourly data keyed by date in an object, with each date containing temperature max/min/mean, precipitation, wind speed and gusts, cloud cover, relative humidity, pressure, dew point, shortwave radiation, and evapotranspiration data plus astronomy information (sunrise/sunset, moon phase). All dates must be in the past (1940 onwards).

Base URLs:

* [https://api.apifreaks.com/v1.0/weather](https://api.apifreaks.com/v1.0/weather)

## Authentication

* API Key (ApiKeyAuthHeader)
    - Parameter Name: **X-apiKey**, in: header. Pass your API key via the X-apiKey request header.

* API Key (ApiKeyAuthQuery)
    - Parameter Name: **apiKey**, in: query. Pass your API key via the apiKey query parameter.

## Weather APIs

### getTimeSeriesData

`GET /time-series`

*Get historical weather data across a date range*

Pull historical weather information for date ranges up to 90 days (daily data) or 7 days (hourly data). Get consistent formatting across your specified date range with reliable historical weather patterns.

#### Parameters

|Name|In|Type|Required|Description|
|---|---|---|---|---|
|format|query|string|false|Format of the response. Possible values: json.|
|startDate|query|string(date)|true|Starting date for the data in YYYY-MM-DD format. Historical dates must be past dates only. Current or future dates are not allowed for historical data. Data available from 1940 onwards. For precision=daily, the difference between endDate and startDate must not exceed 90 days. For precision=hourly, the difference must not exceed 7 days.|
|endDate|query|string(date)|true|End date for the data in YYYY-MM-DD format. Historical dates must be past dates only. Current or future dates are not allowed for historical data. Data available from 1940 onwards. For precision=daily, the difference between endDate and startDate must not exceed 90 days. For precision=hourly, the difference must not exceed 7 days.|
|location|query|string|false|City name, place name, or full address.|
|lat|query|number|false|Latitude of the location, used together with long. A value of exactly 0 is treated as missing by the live API and returns a 400, so use a small non-zero value (e.g. 0.0001) for equator queries.|
|long|query|number|false|Longitude of the location, used together with lat. A value of exactly 0 is treated as missing by the live API and returns a 400, so use a small non-zero value (e.g. 0.0001) for prime-meridian queries.|
|ip|query|string|false|IP(v4 or v6) address for location inference.|
|precision|query|string|false|Precision of the data. daily returns a daily aggregate per date; hourly returns 24 hourly readings per date instead and requires the date range to be 7 days or less.|
|timezone|query|string|false|Timezone for the results.|

##### Enumerated Values

|Parameter|Value|
|---|---|
|format|json|
|precision|daily|
|precision|hourly|

> Example responses

> Successful response

```json
{
  "location": {
    "location_string": "Lahore",
    "country_name": "Pakistan",
    "state_prov": "Punjab",
    "city": "Lahore",
    "locality": "",
    "latitude": "31.56568",
    "longitude": "74.31418",
    "elevation": "",
    "timezone": "Asia/Karachi",
    "timezone_abbreviation": "GMT+5"
  },
  "historical": {
    "2025-08-01": {
      "daily": {
        "timestamp": "2025-08-01",
        "weather_code": 63,
        "temperature_2m_mean": 27.7,
        "temperature_2m_max": 30.3,
        "temperature_2m_min": 26,
        "apparent_temperature_mean": 34,
        "apparent_temperature_max": 36.8,
        "apparent_temperature_min": 31.8,
        "precipitation_sum": 11.9,
        "rain_sum": 11.9,
        "snowfall_sum": 0,
        "wind_speed_10m_max": 10.9,
        "wind_gusts_10m_max": 27.7,
        "wind_speed_10m_mean": 7.4,
        "wind_speed_10m_min": 3.1,
        "wind_gusts_10m_min": 6.8,
        "wind_gusts_10m_mean": 17.8,
        "wind_direction_10m_dominant": 82,
        "shortwave_radiation_sum": 8.98,
        "et0_fao_evapotranspiration_sum": 2.01,
        "cloud_cover_mean": 99,
        "dew_point_2m_mean": 25.9,
        "dew_point_2m_max": 26.5,
        "dew_point_2m_min": 24.9,
        "relative_humidity_2m_mean": 90,
        "relative_humidity_2m_max": 97,
        "relative_humidity_2m_min": 79,
        "pressure_msl_mean": 999.2,
        "surface_pressure_mean": 975.3
      },
      "astronomy": {
        "date": "2025-08-01",
        "mid_night": "00:09",
        "night_end": "03:47",
        "sunrise": "05:17",
        "sunset": "19:00",
        "night_begin": "20:30",
        "sun_status": "-",
        "solar_noon": "12:09",
        "day_length": "13:43",
        "moon_phase": "FIRST_QUARTER",
        "moonrise": "12:18",
        "moonset": "23:04",
        "moon_status": "-"
      }
    }
  }
}
```

```json
{
  "location": {
    "location_string": "Lahore",
    "country_name": "Pakistan",
    "state_prov": "Punjab",
    "city": "Lahore",
    "locality": "",
    "latitude": "31.56568",
    "longitude": "74.31418",
    "elevation": "",
    "timezone": "Asia/Karachi",
    "timezone_abbreviation": "GMT+5"
  },
  "historical": {
    "2025-08-01": {
      "hourly": [
        {
          "timestamp": "2025-08-01T00:00",
          "temperature_2m": 27,
          "relative_humidity_2m": 92,
          "dew_point_2m": 25.5,
          "apparent_temperature": 32.9,
          "precipitation": 0,
          "rain": 0,
          "snowfall": 0,
          "weather_code": 3,
          "pressure_msl": 999.5,
          "surface_pressure": 975.5,
          "cloud_cover": 100,
          "et0_fao_evapotranspiration": 0,
          "wind_speed_10m": 8.2,
          "wind_direction_10m": 100,
          "wind_gusts_10m": 16.2,
          "albedo": null,
          "shortwave_radiation": 0,
          "direct_radiation": 0,
          "diffuse_radiation": 0,
          "direct_normal_irradiance": 0,
          "global_tilted_irradiance": 0
        }
      ],
      "astronomy": {
        "date": "2025-08-01",
        "mid_night": "00:09",
        "night_end": "03:47",
        "sunrise": "05:17",
        "sunset": "19:00",
        "night_begin": "20:30",
        "sun_status": "-",
        "solar_noon": "12:09",
        "day_length": "13:43",
        "moon_phase": "FIRST_QUARTER",
        "moonrise": "12:18",
        "moonset": "23:04",
        "moon_status": "-"
      }
    }
  }
}
```

> Bad Request — Missing/invalid parameters, invalid date range, or location could not be resolved

```json
{
  "timestamp": "2026-07-24T11:35:05.667Z",
  "status": 400,
  "message": "please pass correct parameters",
  "error": "Invalid Param Exception",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:26.589Z",
  "status": 400,
  "message": "startDate must be in yyyy-mm-dd format",
  "error": "invalid-params",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:06.179Z",
  "status": 400,
  "message": "Date range cannot exceed 90 days.",
  "error": "error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:06.654Z",
  "status": 400,
  "message": "Time-series hourly date range must not exceed 7 days",
  "error": "params-exception-error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:14.787Z",
  "status": 400,
  "message": "startDate must be before or equal to endDate",
  "error": "params-exception-error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:14.329Z",
  "status": 400,
  "message": "endDate cannot be current or future date",
  "error": "params-exception-error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:26.108Z",
  "status": 400,
  "message": "Parameter 'startDate' is out of allowed range from 1940-01-01 to 2026-07-24",
  "error": "error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:15.849Z",
  "status": 400,
  "message": "Invalid latitude or longitude values. Latitude must be between -90 and 90, and longitude must be between -180 and 180",
  "error": "invalid-params",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:35:16.321Z",
  "status": 400,
  "message": "Invalid IP address",
  "error": "invalid-params",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:36:14.115Z",
  "status": 400,
  "message": "We couldn't find the location (xyzxyzxyz123nonexistent). Try a city or state level location address only.",
  "error": "error",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:36:04.187Z",
  "status": 400,
  "message": "Invalid precision",
  "error": "invalid-params",
  "path": "/v1.0/weather/time-series"
}
```

```json
{
  "timestamp": "2026-07-24T11:36:04.753Z",
  "status": 400,
  "message": "Check whether your input value is correct; timezone = NotATimezone",
  "error": "error",
  "path": "/v1.0/weather/time-series"
}
```

#### Responses

|Status|Meaning|Description|Schema|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful response|[TimeSeriesResponse](#timeseriesresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|Bad Request — Missing/invalid parameters, invalid date range, or location could not be resolved|[ErrorResponse](#errorresponse)|

#### Response Headers

|Status|Header|Type|Format|Description|
|---|---|---|---|---|
|200|X-AF-Credits-Cost|integer||Specifies the number of credits consumed by the current request.|
|400|X-AF-Credits-Cost|integer||Specifies the number of credits consumed by the current request.|

To perform this operation, you must be authenticated by means of one of the following methods:
ApiKeyAuthHeader, ApiKeyAuthQuery

## Schemas

### TimeSeriesResponse

Time-series weather response containing location data and date-keyed time-series data.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|location|[WeatherLocation](#weatherlocation)|true|none|Location information|
|historical|[TimeSeriesData](#timeseriesdata)|true|none|Time-series data object keyed by date (YYYY-MM-DD). Each key is a date and the value is a TimeSeriesDay containing daily aggregates, hourly readings, and astronomy data.|

### LocationByCoordinates

Location data when the target is specified by GPS coordinates (lat/long).

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|latitude|string|true|none|Geographic latitude coordinate in decimal degrees, ranging from -90 (South Pole) to +90 (North Pole). Returned as a string, not a number.|
|longitude|string|true|none|Geographic longitude coordinate in decimal degrees, ranging from -180 (West) to +180 (East). Returned as a string, not a number.|
|country_name|string|true|none|Full name of the country corresponding to the provided coordinates. Empty string when the coordinates could not be reverse-geocoded (e.g. open ocean).|
|state_prov|string|true|none|State, province, or primary administrative division name for the location. Empty string when the coordinates could not be reverse-geocoded.|
|city|string|true|none|City or municipal area name associated with the coordinate location. Empty string when the coordinates could not be reverse-geocoded.|
|locality|string|false|none|Specific locality, neighborhood, district, or village name within the broader area.|
|elevation|string|false|none|Height above mean sea level in meters for the specified coordinates. Returned as a string, not a number; can be an empty string when unavailable.|
|timezone|string|true|none|IANA timezone database identifier for the location (e.g., America/New_York, Europe/London).|
|timezone_abbreviation|string|true|none|Abbreviated timezone representation based on current offset (e.g., EST, GMT, PST).|

### LocationByIP

Location data when the target is inferred from an IP address.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|continent_code|string|true|none|Two-letter continent code (e.g., NA for North America, EU for Europe, AS for Asia).|
|continent_name|string|true|none|Full name of the continent where the IP address is registered.|
|country_code2|string|true|none|ISO 3166-1 alpha-2 two-letter country code (e.g., US, GB, FR).|
|country_code3|string|true|none|ISO 3166-1 alpha-3 three-letter country code (e.g., USA, GBR, FRA).|
|country_name|string|true|none|Common name of the country associated with the IP address.|
|country_name_official|string|true|none|Official long-form country name as recognized internationally (e.g., United States of America).|
|is_eu|boolean|false|none|Boolean flag indicating whether the country is a member state of the European Union.|
|state_prov|string|true|none|State, province, or primary administrative division associated with the IP location.|
|state_code|string|false|none|ISO 3166-2 subdivision code for the state or province (e.g., CA for California).|
|district|string|false|none|District, county, or secondary administrative division within the region.|
|city|string|true|none|City or urban area name where the IP address is geographically registered.|
|zipcode|string|false|none|Postal code or ZIP code for the approximate location of the IP address.|
|latitude|string|true|none|Geographic latitude in decimal degrees for the IP geolocation, ranging from -90 to +90. Returned as a string, not a number.|
|longitude|string|true|none|Geographic longitude in decimal degrees for the IP geolocation, ranging from -180 to +180. Returned as a string, not a number.|
|locality|string|false|none|Specific locality, neighborhood, or small area designation within the city.|
|elevation|string|false|none|Elevation above mean sea level in meters for the IP geolocation. Returned as a string, not a number; can be an empty string when unavailable.|
|timezone|string|true|none|IANA timezone database identifier for the IP location (e.g., America/Chicago, Asia/Tokyo).|
|timezone_abbreviation|string|true|none|Current timezone abbreviation based on local offset (e.g., CST, JST, UTC).|

### LocationByAddress

Location data when the target is specified by a city name or address string.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|location_string|string|true|none|Original location query string as submitted, including full address or place name.|
|country_name|string|true|none|Resolved country name derived from the geocoded location query.|
|state_prov|string|true|none|State, province, or primary administrative division identified from the location.|
|city|string|true|none|City or municipal area name extracted from the geocoded location.|
|locality|string|false|none|Specific locality, neighborhood, suburb, or village within the geocoded area.|
|latitude|string|true|none|Geocoded latitude coordinate in decimal degrees, ranging from -90 to +90. Returned as a string, not a number.|
|longitude|string|true|none|Geocoded longitude coordinate in decimal degrees, ranging from -180 to +180. Returned as a string, not a number.|
|elevation|string|false|none|Elevation above mean sea level in meters at the geocoded coordinates. Returned as a string, not a number; can be an empty string when unavailable.|
|timezone|string|true|none|IANA timezone database identifier for the geocoded location (e.g., America/Los_Angeles).|
|timezone_abbreviation|string|true|none|Current timezone abbreviation for the location based on local offset (e.g., PDT, CET).|

### HistoricalDaily

Daily historical weather summary with temperature, precipitation, wind, and radiation statistics.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|timestamp|string(date)|true|none|Date of this daily entry, `YYYY-MM-DD`.|
|weather_code|integer|true|none|Weather condition code|
|temperature_2m_mean|number|true|none|Daily mean air temperature at 2 meters (°C)|
|temperature_2m_max|number|true|none|Daily maximum air temperature at 2 meters (°C)|
|temperature_2m_min|number|true|none|Daily minimum air temperature at 2 meters (°C)|
|apparent_temperature_mean|number|true|none|Daily mean perceived temperature (°C)|
|apparent_temperature_max|number|true|none|Daily maximum perceived temperature (°C)|
|apparent_temperature_min|number|true|none|Daily minimum perceived temperature (°C)|
|precipitation_sum|number|true|none|Total precipitation (mm)|
|rain_sum|number|true|none|Total rainfall (mm)|
|snowfall_sum|number|true|none|Total snowfall (cm)|
|wind_speed_10m_max|number|true|none|Maximum wind speed at 10 meters (km/h)|
|wind_gusts_10m_max|number|true|none|Maximum wind gusts at 10 meters (km/h)|
|wind_speed_10m_mean|number|true|none|Daily mean wind speed at 10 meters (km/h)|
|wind_speed_10m_min|number|true|none|Minimum wind speed at 10 meters (km/h)|
|wind_gusts_10m_min|number|true|none|Minimum wind gusts at 10 meters (km/h)|
|wind_gusts_10m_mean|number|true|none|Daily mean wind gusts at 10 meters (km/h)|
|wind_direction_10m_dominant|integer|true|none|Dominant wind direction at 10 meters (°)|
|shortwave_radiation_sum|number|true|none|Daily sum of shortwave solar radiation (MJ/m²)|
|et0_fao_evapotranspiration_sum|number|true|none|Daily sum of reference evapotranspiration (mm)|
|cloud_cover_mean|number|true|none|Daily mean cloud cover percentage (%)|
|dew_point_2m_mean|number|true|none|Daily mean dew point temperature at 2 meters (°C)|
|dew_point_2m_max|number|true|none|Daily maximum dew point temperature at 2 meters (°C)|
|dew_point_2m_min|number|true|none|Daily minimum dew point temperature at 2 meters (°C)|
|relative_humidity_2m_mean|number|true|none|Daily mean relative humidity at 2 meters (%)|
|relative_humidity_2m_max|integer|true|none|Daily maximum relative humidity at 2 meters (%)|
|relative_humidity_2m_min|integer|true|none|Daily minimum relative humidity at 2 meters (%)|
|pressure_msl_mean|number|true|none|Daily mean atmospheric pressure at mean sea level (hPa)|
|surface_pressure_mean|number|true|none|Daily mean surface pressure at ground level (hPa)|

### HistoricalHourly

Hourly historical weather reading with temperature, precipitation, and wind data.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|timestamp|string|true|none|Local timestamp of this hourly reading, in `YYYY-MM-DDTHH:mm` format — not full ISO 8601 (no seconds, no timezone offset/`Z`).|
|temperature_2m|number|true|none|Air temperature at 2 meters (°C)|
|relative_humidity_2m|number|true|none|Relative humidity at 2 meters (%)|
|dew_point_2m|number|true|none|Dew point temperature at 2 meters (°C)|
|apparent_temperature|number|true|none|Perceived temperature (°C)|
|precipitation|number|true|none|Total precipitation in this hour (mm)|
|rain|number|true|none|Rainfall in this hour (mm)|
|snowfall|number|true|none|Snowfall in this hour (cm)|
|weather_code|integer|true|none|Weather condition code|
|pressure_msl|number|true|none|Atmospheric pressure at mean sea level (hPa)|
|surface_pressure|number|true|none|Atmospheric pressure at ground level (hPa)|
|cloud_cover|number|true|none|Cloud cover percentage (%)|
|et0_fao_evapotranspiration|number|true|none|Hourly reference evapotranspiration (mm)|
|wind_speed_10m|number|true|none|Wind speed at 10 meters (km/h)|
|wind_direction_10m|integer|true|none|Wind direction at 10 meters (°)|
|wind_gusts_10m|number|true|none|Wind gusts at 10 meters (km/h)|
|albedo|number|true|none|Reflectivity of the Earth's surface. Observed as null in every sampled response; this field is not currently populated by the upstream data source.|
|shortwave_radiation|number|true|none|Incoming shortwave solar radiation (W/m²)|
|direct_radiation|number|true|none|Direct solar radiation (W/m²)|
|diffuse_radiation|number|true|none|Diffuse solar radiation (W/m²)|
|direct_normal_irradiance|number|true|none|Direct solar irradiance (W/m²)|
|global_tilted_irradiance|number|true|none|Total solar irradiance on a tilted surface (W/m²)|

### Astronomy

Astronomical data including sunrise, sunset, solar noon, day length, moon phase, and moon times.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|date|string(date)|true|none|Calendar date in YYYY-MM-DD format for the astronomical data.|
|mid_night|string|true|none|Time of true solar midnight in HH:MM format.|
|night_end|string|true|none|Time when astronomical twilight ends and dawn begins in HH:MM format.|
|sunrise|string|true|none|Time when the Sun becomes visible above the horizon in HH:MM format.|
|solar_noon|string|true|none|Time when the Sun reaches its highest point in the sky in HH:MM format.|
|sunset|string|true|none|Time when the Sun disappears below the horizon in HH:MM format.|
|night_begin|string|true|none|Time when astronomical twilight begins and night starts in HH:MM format.|
|day_length|string|true|none|Total duration of daylight in HH:MM format.|
|sun_status|string|true|none|Current position of the Sun relative to the horizon (above_horizon, below_horizon, or -).|
|moon_phase|string|true|none|Current lunar phase (NEW_MOON, WAXING_CRESCENT, FULL_MOON, WANING_GIBBOUS, etc.).|
|moonrise|string|true|none|Time when the Moon becomes visible above the horizon in HH:MM format.|
|moonset|string|true|none|Time when the Moon disappears below the horizon in HH:MM format.|
|moon_status|string|true|none|Current visibility status of the Moon (visible, not_visible, or -).|

### ErrorResponse

Standard error envelope returned by the API on failed requests.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|error|string|false|none|Short error category or exception type.|
|message|string|true|none|Human-readable error message describing the failure.|
|path|string|false|none|API endpoint path that produced the error.|
|status|integer|false|none|HTTP status code returned with the error.|
|timestamp|string(date-time)|false|none|Timestamp when the error occurred (ISO 8601).|

### WeatherLocation

Location information

#### Properties

oneOf

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|*anonymous*|[LocationByCoordinates](#locationbycoordinates)|false|none|Location data when the target is specified by GPS coordinates (lat/long).|

xor

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|*anonymous*|[LocationByIP](#locationbyip)|false|none|Location data when the target is inferred from an IP address.|

xor

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|*anonymous*|[LocationByAddress](#locationbyaddress)|false|none|Location data when the target is specified by a city name or address string.|

### TimeSeriesDay

Time-series weather data for a single day. Contains astronomy data plus exactly one of daily or hourly, depending on the request's precision parameter — the other key is absent, not empty, in the actual response.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|daily|[HistoricalDaily](#historicaldaily)|false|none|Daily aggregate weather data for the specified day. Present only when precision=daily (the default); absent entirely when precision=hourly.|
|hourly|[[HistoricalHourly](#historicalhourly)]|false|none|Array of hourly weather readings for this day. Present only when precision=hourly; absent entirely when precision=daily.|
|astronomy|[Astronomy](#astronomy)|true|none|Astronomical data including sunrise, sunset, and moon phases. Present regardless of precision.|

### TimeSeriesData

Time-series data object keyed by date (YYYY-MM-DD). Each key is a date and the value is a TimeSeriesDay containing daily aggregates, hourly readings, and astronomy data.

#### Properties

|Name|Type|Required|Restrictions|Description|
|---|---|---|---|---|
|date|[TimeSeriesDay](#timeseriesday)|true|none|Time-series weather data for a single day. Contains astronomy data plus exactly one of daily or hourly, depending on the request's precision parameter — the other key is absent, not empty, in the actual response.|
