📦 Data Types
This page describes the responses of the three data endpoints. Forecast, air-quality and pollen data come from Open-Meteo.
Which fields are returned? Only the fields you selected and published on the dashboard’s Weather Data page (separately for current, hourly and daily), or the fields of the preset named in
?preset=. Every entry also always containsiconandweather_description.
🌐 Common Response Wrapper
1type ApiResponse = {
2message: CityResult[];
3};
4
5type CityResult = {
6city: string; // City name as saved on the Weather Data page
7locale?: string; // Only on accounts whose cities were saved with a locale by an older dashboard
8data: WeatherData | HourlyForecastData | DailyForecastData;
9};
🌞 WeatherData
Returned by GET /weather. One key per selected field (see Available Fields), plus two that are always present.
1type WeatherData = {
2icon: string; // Animated icon URL, e.g. https://cdn.skycaster.tv/set-2/01d.gif
3weather_description: string; // e.g. "Clear sky" — or your own wording with ?lang=
4[fieldId: string]: number | string | WeatherAlert[] | null;
5};
Example data object (°C and km/h):
{
"icon": "https://cdn.skycaster.tv/set-2/01d.gif",
"weather_description": "Clear sky",
"temp": 18.5,
"humidity": 62,
"dew": 11.2,
"wind": 14.8,
"wind_direction": 180,
"wind_direction_label": "S",
"eu_aqi": 28,
"alerts": []
}
🕐 HourlyForecastData
Returned by GET /forecast-hourly. forecast is keyed by the local date-time of each hour (the city’s own time zone).
1type HourlyForecastData = {
2forecast: {
3 [localDateTime: string]: HourlyEntry; // e.g. "2025-05-17T06:00"
4};
5type: "hourly";
6};
7
8type HourlyEntry = {
9time: string; // Same as the key
10icon: string;
11weather_description: string;
12[fieldId: string]: number | string | WeatherAlert[] | null;
13};
📅 DailyForecastData
Returned by GET /forecast-daily. forecast is keyed by local date.
1type DailyForecastData = {
2forecast: {
3 [localDate: string]: DailyEntry; // e.g. "2025-05-17"
4};
5type: "daily";
6days: number; // The count you requested
7};
8
9type DailyEntry = {
10time: string; // Same as the key
11icon: string; // Always the day icon
12weather_description: string;
13[fieldId: string]: number | string | WeatherAlert[] | null;
14};
🎨 Icons
icon points to an animated GIF from the icon pack selected on the Weather Data page (currently Skycaster Classic, set-2):
https://cdn.skycaster.tv/set-2/<code>.gif
| Code | Condition | Night variant |
|---|---|---|
01d / 01n | Clear sky | ✓ |
02d / 02n | Mainly clear | ✓ |
03d / 03n | Partly cloudy | ✓ |
04d | Overcast | — |
09d / 09n | Drizzle, rain showers | ✓ |
10d | Rain, freezing rain | — |
11d | Thunderstorm | — |
13d | Snow, snow showers | — |
50d | Fog | — |
Current and hourly entries use the night variant after dark where one exists; daily entries always use the day icon.
💬 Weather Descriptions
weather_description is one of: Clear sky, Mainly clear, Partly cloudy, Overcast, Foggy, Drizzle, Freezing drizzle, Rain, Freezing rain, Snow, Snow grains, Rain showers, Snow showers, Thunderstorm.
Add ?lang=<id> to any request to replace these (and alert titles) with your own wording — set it up under Languages & wording on the Weather Data page. Phrases you leave empty stay in English.
🚨 Weather Alerts
Select Weather Alerts (alerts for current/hourly, daily_alerts for daily) to get an array of alerts for each entry. Alerts are derived from the forecast data using the thresholds below — they are not official warnings from a national weather service.
type WeatherAlert = {
type: "thunderstorm" | "wind" | "heat" | "cold" | "rain" | "freezing_rain" | "snow" | "uv" | "fog";
severity: "minor" | "moderate" | "severe";
title: string; // English, or your own wording with ?lang=
};
"alerts": [
{ "type": "wind", "severity": "moderate", "title": "Strong wind gusts" },
{ "type": "uv", "severity": "moderate", "title": "Very high UV" }
]
Thresholds are evaluated in metric units, whatever units you publish:
| Type | Moderate | Severe |
|---|---|---|
thunderstorm | Thunderstorm (WMO 95) | Thunderstorm with hail (WMO 96, 99) |
wind | Gusts ≥ 75 km/h | Gusts ≥ 100 km/h |
heat | Temperature ≥ 35 °C (daily: max) | ≥ 40 °C |
cold | Temperature ≤ −15 °C (daily: min) | ≤ −25 °C |
rain | ≥ 10 mm in an hour, ≥ 30 mm in a day, or heavy rain / violent showers (WMO 65, 82) | ≥ 30 mm in an hour or ≥ 60 mm in a day |
freezing_rain | Light freezing rain (WMO 66) | Heavy freezing rain (WMO 67) |
snow | ≥ 10 cm in a day, or heavy snow (WMO 75, 86) | ≥ 25 cm in a day |
uv | UV index ≥ 8 | UV index ≥ 11 |
fog | Fog (WMO 45, 48) is reported as minor | — |
Current conditions have no rainfall amount, so current rain alerts come from the weather code only.
📋 Available Fields
The Field ID is what you select on the Weather Data page and is also the key in the response — the one exception is Wind Direction (10 m), which returns wind_direction in degrees plus a 16-point compass label wind_direction_label (e.g. "SW").
Units follow what you publish on the Weather Data page: temperature in °C or °F, wind in km/h, mph or m/s. Publishing °F also switches precipitation to inches and snow depth and visibility to feet.
Current & Hourly Fields
Available on /weather and /forecast-hourly. Air-quality and pollen fields are current-only. For amounts such as precipitation or sunshine, current values cover the preceding 15 minutes and hourly values the preceding hour.
Alerts
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
alerts | alerts | Weather Alerts | array (Weather Alerts) |
Temperature
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
temp | temp | Temperature (2m) | °C / °F |
feels | feels | Feels Like | °C / °F |
dew | dew | Dew Point | °C / °F |
Humidity & Precipitation
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
humidity | humidity | Humidity | % |
precip_prob | precip_prob | Precip. Probability | % |
precip | precip | Precipitation | mm / inch |
rain | rain | Rain | mm / inch |
showers | showers | Showers | mm / inch |
snowfall | snowfall | Snowfall | cm / inch |
snow_depth | snow_depth | Snow Depth | m / ft |
Wind
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
wind | wind | Wind Speed (10m) | km/h, mph or m/s |
wind80 | wind80 | Wind Speed (80m) | km/h, mph or m/s |
wind120 | wind120 | Wind Speed (120m) | km/h, mph or m/s |
wind180 | wind180 | Wind Speed (180m) | km/h, mph or m/s |
gusts | gusts | Wind Gusts (10m) | km/h, mph or m/s |
winddir | wind_direction, wind_direction_label | Wind Direction (10m) | degrees (0–360) |
winddir80 | winddir80 | Wind Direction (80m) | degrees (0–360) |
winddir120 | winddir120 | Wind Direction (120m) | degrees (0–360) |
winddir180 | winddir180 | Wind Direction (180m) | degrees (0–360) |
Sky & Clouds
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
cloud | cloud | Cloud Cover | % |
cloud_low | cloud_low | Cloud Cover (Low) | % |
cloud_mid | cloud_mid | Cloud Cover (Mid) | % |
cloud_high | cloud_high | Cloud Cover (High) | % |
visibility | visibility | Visibility | m / ft |
is_day | is_day | Day / Night | 1 = day, 0 = night |
sunshine | sunshine | Sunshine Duration | seconds |
Pressure & Radiation
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
pressure | pressure | Pressure (MSL) | hPa |
surf_pres | surf_pres | Surface Pressure | hPa |
shortwave | shortwave | Shortwave Radiation | W/m² |
direct_rad | direct_rad | Direct Radiation | W/m² |
diffuse_rad | diffuse_rad | Diffuse Radiation | W/m² |
uv | uv | UV Index | index |
uv_clear | uv_clear | UV Index (Clear Sky) | index |
Atmosphere
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
code | code | Weather Code | WMO code |
cape | cape | CAPE | J/kg |
vpd | vpd | Vapour Pressure Deficit | kPa |
et0 | et0 | Evapotranspiration | mm / inch |
Soil
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
soil_t0 | soil_t0 | Soil Temp (0cm) | °C / °F |
soil_t6 | soil_t6 | Soil Temp (6cm) | °C / °F |
soil_t18 | soil_t18 | Soil Temp (18cm) | °C / °F |
soil_t54 | soil_t54 | Soil Temp (54cm) | °C / °F |
soil_m01 | soil_m01 | Soil Moisture (0–1cm) | m³/m³ |
soil_m13 | soil_m13 | Soil Moisture (1–3cm) | m³/m³ |
soil_m39 | soil_m39 | Soil Moisture (3–9cm) | m³/m³ |
soil_m927 | soil_m927 | Soil Moisture (9–27cm) | m³/m³ |
soil_m2781 | soil_m2781 | Soil Moisture (27–81cm) | m³/m³ |
Air Quality
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
eu_aqi | eu_aqi | European AQI | index — EU AQI 0–100+, US AQI 0–500 |
us_aqi | us_aqi | US AQI | index — EU AQI 0–100+, US AQI 0–500 |
pm25 | pm25 | PM2.5 | μg/m³ |
pm10 | pm10 | PM10 | μg/m³ |
co | co | Carbon Monoxide | μg/m³ |
no2 | no2 | Nitrogen Dioxide | μg/m³ |
so2 | so2 | Sulphur Dioxide | μg/m³ |
ozone | ozone | Ozone | μg/m³ |
dust | dust | Dust | μg/m³ |
alder_pol | alder_pol | Alder Pollen | grains/m³ |
birch_pol | birch_pol | Birch Pollen | grains/m³ |
grass_pol | grass_pol | Grass Pollen | grains/m³ |
mugwort_pol | mugwort_pol | Mugwort Pollen | grains/m³ |
olive_pol | olive_pol | Olive Pollen | grains/m³ |
ragweed_pol | ragweed_pol | Ragweed Pollen | grains/m³ |
Daily Fields
Available on /forecast-daily. Sums and durations cover the whole local day.
Alerts
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_alerts | daily_alerts | Weather Alerts | array (Weather Alerts) |
Temperature
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_temp_max | daily_temp_max | Max Temperature | °C / °F |
daily_temp_min | daily_temp_min | Min Temperature | °C / °F |
daily_temp_mean | daily_temp_mean | Mean Temperature | °C / °F |
daily_apt_max | daily_apt_max | Feels Like Max | °C / °F |
daily_apt_min | daily_apt_min | Feels Like Min | °C / °F |
daily_apt_mean | daily_apt_mean | Feels Like Mean | °C / °F |
Precipitation
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_precip | daily_precip | Precipitation Total | mm / inch |
daily_rain | daily_rain | Rain Total | mm / inch |
daily_showers | daily_showers | Showers Total | mm / inch |
daily_snow | daily_snow | Snowfall Total | cm / inch |
daily_precip_h | daily_precip_h | Precip Hours | hours |
daily_precip_p | daily_precip_p | Precip Probability | % |
Wind
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_wind_max | daily_wind_max | Max Wind Speed | km/h, mph or m/s |
daily_gust_max | daily_gust_max | Max Wind Gusts | km/h, mph or m/s |
daily_wind_dir | daily_wind_dir | Dominant Direction | degrees (0–360) |
Sky
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_code | daily_code | Weather Code | WMO code |
daily_daylight | daily_daylight | Daylight Duration | seconds |
daily_sunshine | daily_sunshine | Sunshine Duration | seconds |
Radiation & Energy
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_radiation | daily_radiation | Shortwave Radiation | MJ/m² |
daily_et0 | daily_et0 | Evapotranspiration | mm / inch |
UV
| Field ID | Response key | Description | Unit (°C / °F) |
|---|---|---|---|
daily_uv_max | daily_uv_max | UV Index Max | index |
daily_uv_cs | daily_uv_cs | UV Index (Clear Sky) | index |
Legacy Field Names
Accounts configured with an older dashboard may still have legacy field names published (for example temperature, feels_like, wind_speed, heat_index, air_quality, ozone_level, temperature_max, sunrise). These keep working and are returned under the same legacy name. Re-publish from the Weather Data page to switch to the current field IDs.
🧾 XML Format
With format=xml (or XML chosen as the API response format on the Weather Data page) the same structure is returned as XML: the root is <response>, each array element is an <item>, and keys that aren’t valid XML names (such as forecast dates) become <entry key="…">.
<?xml version="1.0"?>
<response>
<item>
<city>Berlin</city>
<data>
<forecast>
<entry key="2025-05-17">
<time>2025-05-17</time>
<icon>https://cdn.skycaster.tv/set-2/01d.gif</icon>
<weather_description>Clear sky</weather_description>
<daily_temp_max>24.9</daily_temp_max>
</entry>
</forecast>
<type>daily</type>
<days>1</days>
</data>
</item>
</response>
📞 Need Assistance?
If you have questions or need support, email us at support@skycaster.tv.