Skip to content

Space Weather & Atmosphere API

The Weather API aggregates data from NOAA’s Space Weather Prediction Center (SWPC) for solar and geomagnetic conditions, and from Open-Meteo for local atmospheric forecasts. All data is cached in the database and refreshed on a configurable schedule.

Last 30 days of solar activity data plus the current 10.7 cm solar flux.

GET /api/weather/solar
{
"days": [
{
"date": "2026-02-14",
"radio_flux_10cm": 158.0,
"sunspot_number": 120,
"sunspot_area": 450,
"xray_flares": { "c": 3, "m": 1, "x": 0, "s": 0 },
"optical_flares": { "c": 2, "m": 0, "x": 0, "s": 1 }
}
],
"current_flux": 158.0,
"flux_timestamp": "2026-02-14T18:00:00Z"
}

Last 30 days of planetary A and K index data, plus recent 3-hourly K-index entries.

GET /api/weather/geomagnetic
{
"days": [
{
"date": "2026-02-14",
"planetary_a": 8,
"planetary_k": [2, 2, 3, 2, 1, 2, 3, 2]
}
],
"recent_kindex": [
{
"time_tag": "2026-02-14T21:00:00Z",
"kp": 2.33,
"a_running": 8.0
}
]
}

Parsed WWV/WWVH radio propagation bulletin with HF band condition assessments.

GET /api/weather/wwv
{
"issued": "2026-02-14T18:00:00Z",
"solar_flux": 158,
"a_index": 8,
"k_index": 2,
"conditions_summary": "No space weather storms observed",
"band_conditions": [
{ "band": "80m-40m", "day": "Good", "night": "Good" },
{ "band": "30m-20m", "day": "Good", "night": "Fair" },
{ "band": "17m-15m", "day": "Fair", "night": "Poor" },
{ "band": "12m-10m", "day": "Poor", "night": "Poor" }
],
"forecast": "Solar activity is expected to be moderate..."
}

OVATION aurora prediction model data, provided as a grid of coordinates with aurora probability values.

GET /api/weather/aurora
{
"observation_time": "2026-02-14T18:30:00Z",
"forecast_time": "2026-02-14T19:00:00Z",
"coordinates": [
{ "lon": -180.0, "lat": 65.0, "aurora": 42 },
{ "lon": -179.0, "lat": 65.0, "aurora": 38 }
]
}

The aurora field is a probability value (0-100).


Compact dashboard summary combining all current space weather conditions.

GET /api/weather/summary
{
"solar_flux": 158.0,
"sunspot_number": 120,
"a_index": 8,
"k_index": 2.33,
"k_level": "quiet",
"band_conditions": [
{ "band": "80m-40m", "day": "Good", "night": "Good" }
],
"scales": {
"radio_blackout": { "scale": 0, "text": "None" },
"solar_radiation": { "scale": 0, "text": "None" },
"geomagnetic_storm": { "scale": 0, "text": "None" }
},
"last_updated": "2026-02-14T18:00:00Z"
}
K-indexLevelImpact
< 3quietNormal conditions
3-4unsettledMinor disturbances
>= 5stormGeomagnetic storm active
ScaleSeverity
0None
1Minor
2Moderate
3Strong
4Severe
5Extreme

Force an immediate weather data refresh from all upstream sources.

POST /api/weather/refresh
{
"status": "refreshing",
"message": "Weather refresh started in background"
}

Local atmospheric conditions at the observer’s location, sourced from Open-Meteo. Used to assess observing quality (cloud cover, visibility, wind).

GET /api/atmosphere/forecast
{
"hourly": [
{
"time": "2026-02-14T22:00:00Z",
"temp": -2.5,
"humidity": 45.0,
"cloud_cover": 12.0,
"cloud_cover_low": 5.0,
"cloud_cover_mid": 3.0,
"cloud_cover_high": 8.0,
"visibility": 32000.0,
"wind_speed": 8.5,
"wind_dir": 225.0,
"precipitation": 0.0,
"weather_code": 0,
"surface_pressure": 1013.2
}
],
"conditions": {
"score": 85,
"label": "Excellent",
"cloud_pct": 12.0,
"visibility_km": 32.0,
"wind_speed": 8.5,
"precipitation": 0.0,
"temp": -2.5,
"humidity": 45.0
},
"observer_lat": 39.7392,
"observer_lon": -104.9903
}

The conditions.score field (0-100) aggregates multiple factors into a single observing quality assessment:

ScoreLabelMeaning
80-100ExcellentClear skies, good visibility, low wind
60-79GoodMinor clouds or haze
40-59FairPartial cloud cover
20-39PoorSignificant cloud cover or weather
0-19BadOvercast or active precipitation

A lighter endpoint that returns only the current observing conditions without the full hourly forecast.

GET /api/atmosphere/conditions
{
"conditions": {
"score": 85,
"label": "Excellent",
"cloud_pct": 12.0,
"visibility_km": 32.0,
"wind_speed": 8.5,
"precipitation": 0.0,
"temp": -2.5,
"humidity": 45.0
},
"observer_lat": 39.7392,
"observer_lon": -104.9903
}

POST /api/atmosphere/refresh
{
"status": "refreshing",
"message": "Atmosphere refresh started in background"
}