{"openapi":"3.1.0","info":{"title":"IonoFlux API","description":"\n**IonoFlux** unifies global space-weather data (solar flux, sunspots, Kp/Ap, X-rays, solar wind, TEC, MUF, alerts)\nfrom NOAA SWPC, GFZ Potsdam, SILSO and GIRO into one consistent JSON API, and predicts HF radio propagation\nbetween any two points on Earth.\n\n### Authentication & limits\n* Send your key in the `X-API-Key` header. Create free keys at [/account](/account).\n* An API key is required. Free plan: **1,000 requests per UTC day** per key.\n* **Web keys** work only from browsers on their allowed domains; **server keys** require a service URL.\n* Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (seconds).\n\n### Conventions\n* Times are ISO 8601 in UTC. Frequencies are MHz.\n* Every dataset reports its upstream `source`, `attribution` (license) and `last_updated` time.\n* Predictions include a `reliability` probability, a data `confidence` level and the model's known limitations.\n","version":"0.1.0"},"servers":[{"url":"https://ionoflux.runvia.app","description":"production"}],"paths":{"/v1/space-weather/current":{"get":{"tags":["Overview"],"summary":"Current space-weather summary","description":"One-call snapshot of the latest solar, geomagnetic and ionospheric indicators with data freshness.","operationId":"current_v1_space_weather_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/alerts":{"get":{"tags":["Alerts"],"summary":"Space-weather alerts","description":"NOAA SWPC alerts, watches, warnings and summaries (geomagnetic storms, radio blackouts, proton events),\nplus IonoFlux-detected Sporadic-E openings (`ES_OPENING`, source `ionoflux`).","operationId":"alerts_v1_alerts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only alerts issued after this time. Default: last 7 days.","title":"Since"},"description":"Only alerts issued after this time. Default: last 7 days."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"enum":["ALERT","WARNING","WATCH","SUMMARY","CANCEL","OTHER","ES_OPENING"],"type":"string"}},{"type":"null"}],"description":"Filter by category (repeatable).","title":"Category"},"description":"Filter by category (repeatable)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertOut"},"title":"Response Alerts V1 Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/alerts/scales":{"get":{"tags":["Alerts"],"summary":"NOAA space-weather scales (R/S/G)","description":"Current NOAA Radio blackout (R), Solar radiation storm (S) and Geomagnetic storm (G) levels,\nthe 24-hour maximum, and probabilities for the next three days.","operationId":"scales_v1_alerts_scales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Scales V1 Alerts Scales Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/sources":{"get":{"tags":["Meta"],"summary":"Data sources and collection status","description":"Upstream providers, licenses, and the health of each collector (last success, failures, staleness).","operationId":"sources_v1_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Sources V1 Sources Get"}}}}}}},"/v1/data-status":{"get":{"tags":["Meta"],"summary":"Collected data in the database","description":"Per dataset: records held (approximate for large tables), records in the last 24 hours, time coverage,\nretention and collector freshness, plus the Parquet archive of raw reception reports. Cached for two minutes.","operationId":"data_status_summary_v1_data_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Data Status Summary V1 Data Status Get"}}}}}}},"/v1/data-status/{dataset}":{"get":{"tags":["Meta"],"summary":"Newest records of a dataset","description":"The most recent records of one dataset as stored (reference tables: the largest entries).","operationId":"data_status_detail_v1_data_status__dataset__get","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"enum":["sfi","ssn","xray","solar_wind","kp","ap","tec","ionosonde","stations","pskreporter","wsprnet","activity","alerts","places"],"type":"string","description":"Dataset key from `/v1/data-status`.","title":"Dataset"},"description":"Dataset key from `/v1/data-status`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Data Status Detail V1 Data Status  Dataset  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/geocode":{"get":{"tags":["Meta"],"summary":"Resolve a location","description":"Resolve a location the same way the propagation endpoints do. Place names use OpenStreetMap Nominatim.","operationId":"geocode_v1_geocode_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"`lat,lon`, Maidenhead locator (e.g. `PM37`) or a place name.","examples":["Seoul, South Korea","FN20xr","37.5665,126.9780"],"title":"Q"},"description":"`lat,lon`, Maidenhead locator (e.g. `PM37`) or a place name."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Geocode V1 Geocode Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/geocode/suggest":{"get":{"tags":["Meta"],"summary":"Location autocomplete","description":"Cities matching the start of a name (any language GeoNames knows, e.g. `서울`), largest first.\nCoordinates and Maidenhead locators are recognised directly. Not counted against the daily quota.","operationId":"geocode_suggest_v1_geocode_suggest_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":80,"description":"Partial place name, e.g. `Seo` or `London, Ca`.","examples":["Seo"],"title":"Q"},"description":"Partial place name, e.g. `Seo` or `London, Ca`."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":15,"minimum":1,"default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Geocode Suggest V1 Geocode Suggest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solar/flux":{"get":{"tags":["Solar"],"summary":"Solar Flux Index (F10.7)","description":"10.7 cm solar radio flux in solar flux units (sfu), measured at Penticton up to three times per day.\nThe 20:00 UTC (“Noon”) value is the official daily index.","operationId":"solar_flux_v1_solar_flux_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solar/sunspots":{"get":{"tags":["Solar"],"summary":"Sunspot number","description":"Daily sunspot number.","operationId":"sunspots_v1_solar_sunspots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["swpc","silso"],"type":"string"},{"type":"null"}],"description":"`swpc` = SESC daily sunspot number, `silso` = Estimated International Sunspot Number.","title":"Source"},"description":"`swpc` = SESC daily sunspot number, `silso` = Estimated International Sunspot Number."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solar/xray":{"get":{"tags":["Solar"],"summary":"GOES X-ray flux","description":"1-minute GOES primary satellite X-ray irradiance (W/m²). Flare class: A < 1e-7 ≤ B < 1e-6 ≤ C < 1e-5 ≤ M < 1e-4 ≤ X.","operationId":"xray_v1_solar_xray_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."},{"name":"band","in":"query","required":false,"schema":{"enum":["long","short"],"type":"string","description":"`long` = 0.1–0.8 nm (flare class), `short` = 0.05–0.4 nm.","default":"long","title":"Band"},"description":"`long` = 0.1–0.8 nm (flare class), `short` = 0.05–0.4 nm."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solar/wind":{"get":{"tags":["Solar"],"summary":"Solar wind at L1","description":"Real-time solar wind from the active L1 spacecraft (1-minute).","operationId":"solar_wind_v1_solar_wind_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."},{"name":"parameter","in":"query","required":false,"schema":{"enum":["speed","density","bt","bz"],"type":"string","description":"speed (km/s), density (p/cm³), bt / bz (nT, GSM).","default":"speed","title":"Parameter"},"description":"speed (km/s), density (p/cm³), bt / bz (nT, GSM)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/geomagnetic/kp":{"get":{"tags":["Geomagnetic"],"summary":"Kp index","description":"3-hourly planetary Kp index (0–9). Kp ≥ 5 corresponds to geomagnetic storm levels G1–G5.","operationId":"kp_v1_geomagnetic_kp_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["swpc","gfz"],"type":"string"},{"type":"null"}],"description":"`swpc` (default) or `gfz`.","title":"Source"},"description":"`swpc` (default) or `gfz`."},{"name":"include_forecast","in":"query","required":false,"schema":{"type":"boolean","description":"Append the NOAA SWPC 3-day Kp forecast.","default":true,"title":"Include Forecast"},"description":"Append the NOAA SWPC 3-day Kp forecast."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KpSeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/geomagnetic/ap":{"get":{"tags":["Geomagnetic"],"summary":"Ap index","description":"Daily planetary equivalent amplitude Ap (GFZ Potsdam).","operationId":"ap_v1_geomagnetic_ap_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"interval","in":"query","required":false,"schema":{"enum":["raw","1m","5m","1h","3h","1d","7d","1mo"],"type":"string","description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket.","default":"raw","title":"Interval"},"description":"Aggregation bucket. `raw` returns individual observations; others return mean/min/max/count per bucket."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of points (newest kept).","default":5000,"title":"Limit"},"description":"Maximum number of points (newest kept)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/statistics/{metric}":{"get":{"tags":["Statistics"],"summary":"Period statistics","description":"Count, min, max, mean, median, standard deviation and net change of a metric over a period (default: 30 days).","operationId":"statistics_v1_statistics__metric__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"enum":["sfi","ssn","kp","ap","xray_long","xray_short","solar_wind_speed","solar_wind_density","imf_bt","imf_bz"],"type":"string","description":"Metric key.","title":"Metric"},"description":"Metric key."},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days.","title":"Start"},"description":"ISO 8601 start time (UTC). Default: `end` minus 7 days."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO 8601 end time (UTC). Default: now.","title":"End"},"description":"ISO 8601 end time (UTC). Default: now."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional source override.","title":"Source"},"description":"Optional source override."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatisticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ionosphere/tec":{"get":{"tags":["Ionosphere"],"summary":"Total Electron Content map","description":"Global vertical TEC (TECU) from NOAA GloTEC on a 2.5° × 5° grid, refreshed every 10 minutes.\nPass `lat` and `lon` for a bilinearly interpolated point value instead of the full grid.","operationId":"tec_v1_ionosphere_tec_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Map time (UTC); the nearest map within ±15 min is used. Default: latest.","title":"Time"},"description":"Map time (UTC); the nearest map within ±15 min is used. Default: latest."},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"description":"Latitude for a single-point value.","title":"Lat"},"description":"Latitude for a single-point value."},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"description":"Longitude for a single-point value.","title":"Lon"},"description":"Longitude for a single-point value."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","geojson"],"type":"string","description":"`json` (column arrays) or `geojson` (FeatureCollection of points).","default":"json","title":"Format"},"description":"`json` (column arrays) or `geojson` (FeatureCollection of points)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Tec V1 Ionosphere Tec Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ionosphere/muf":{"get":{"tags":["Ionosphere"],"summary":"Maximum Usable Frequency map","description":"Maximum usable frequency for an F2 hop of `hop_km` (default MUF(3000)F2), plus foF2, in MHz.","operationId":"muf_v1_ionosphere_muf_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Map time (UTC); the nearest map within ±15 min is used. Default: latest.","title":"Time"},"description":"Map time (UTC); the nearest map within ±15 min is used. Default: latest."},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"description":"Latitude for a single-point value.","title":"Lat"},"description":"Latitude for a single-point value."},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"description":"Longitude for a single-point value.","title":"Lon"},"description":"Longitude for a single-point value."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","geojson"],"type":"string","description":"`json` (column arrays) or `geojson` (FeatureCollection of points).","default":"json","title":"Format"},"description":"`json` (column arrays) or `geojson` (FeatureCollection of points)."},{"name":"hop_km","in":"query","required":false,"schema":{"type":"number","maximum":4000.0,"minimum":0.0,"description":"Hop ground range. 3000 km gives the standard MUF(3000)F2.","default":3000,"title":"Hop Km"},"description":"Hop ground range. 3000 km gives the standard MUF(3000)F2."},{"name":"source","in":"query","required":false,"schema":{"enum":["model","ionosonde"],"type":"string","description":"`model` = derived from GloTEC NmF2/hmF2 everywhere; `ionosonde` = measured MUF(3000)F2 at stations.","default":"model","title":"Source"},"description":"`model` = derived from GloTEC NmF2/hmF2 everywhere; `ionosonde` = measured MUF(3000)F2 at stations."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Muf V1 Ionosphere Muf Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ionosphere/stations":{"get":{"tags":["Ionosphere"],"summary":"Ionosonde stations","description":"Ionosonde stations with their latest observation.","operationId":"stations_v1_ionosphere_stations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"max_age_hours","in":"query","required":false,"schema":{"type":"integer","maximum":48,"minimum":1,"description":"Only stations reporting within this window.","default":6,"title":"Max Age Hours"},"description":"Only stations reporting within this window."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Stations V1 Ionosphere Stations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/propagation/path":{"get":{"tags":["Propagation"],"summary":"Analyze an HF path","description":"Predict whether an HF contact between two points works at a given time and frequency.\n\nReturns availability (EXCELLENT/GOOD/FAIR/POOR/CLOSED), reliability (0–1), and the three most reliable\namateur-band frequencies for the chosen mode, with full path details (hops, MUF, losses, control points).","operationId":"path_v1_propagation_path_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Transmitter: `lat,lon`, Maidenhead locator, or place name.","examples":["37.5665,126.9780","Seoul, South Korea","PM37"],"title":"From"},"description":"Transmitter: `lat,lon`, Maidenhead locator, or place name."},{"name":"to","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Receiver: `lat,lon`, Maidenhead locator, or place name.","examples":["40.7128,-74.0060","New York, USA","FN20"],"title":"To"},"description":"Receiver: `lat,lon`, Maidenhead locator, or place name."},{"name":"frequency","in":"query","required":true,"schema":{"type":"number","maximum":54.0,"minimum":1.8,"description":"Operating frequency in MHz.","examples":[14.074],"title":"Frequency"},"description":"Operating frequency in MHz."},{"name":"datetime","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"UTC time (≤ 72 h ahead). Default: now.","title":"Datetime"},"description":"UTC time (≤ 72 h ahead). Default: now."},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Mode","description":"Operating mode; sets the required SNR and candidate band frequencies.","default":"ft8"},"description":"Operating mode; sets the required SNR and candidate band frequencies."},{"name":"power","in":"query","required":false,"schema":{"type":"number","maximum":100000.0,"exclusiveMinimum":0.0,"description":"Transmitter power in watts.","default":100,"title":"Power"},"description":"Transmitter power in watts."},{"name":"tx_gain","in":"query","required":false,"schema":{"type":"number","maximum":30.0,"minimum":-20.0,"description":"Transmit antenna gain (dBi). 2.15 = dipole.","default":2.15,"title":"Tx Gain"},"description":"Transmit antenna gain (dBi). 2.15 = dipole."},{"name":"rx_gain","in":"query","required":false,"schema":{"type":"number","maximum":30.0,"minimum":-20.0,"description":"Receive antenna gain (dBi).","default":2.15,"title":"Rx Gain"},"description":"Receive antenna gain (dBi)."},{"name":"noise","in":"query","required":false,"schema":{"$ref":"#/components/schemas/NoiseEnvironment","description":"Receiver site man-made noise (ITU-R P.372).","default":"rural"},"description":"Receiver site man-made noise (ITU-R P.372)."},{"name":"path","in":"query","required":false,"schema":{"enum":["auto","short","long"],"type":"string","description":"Great-circle path; `auto` picks the more reliable.","default":"auto","title":"Path"},"description":"Great-circle path; `auto` picks the more reliable."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/propagation/forecast":{"get":{"tags":["Propagation"],"summary":"Hourly path forecast","description":"Hour-by-hour MUF, best frequency and per-band reliability for a path over the next `hours` (max 72).","operationId":"forecast_v1_propagation_forecast_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Transmitter location.","examples":["Seoul, South Korea"],"title":"From"},"description":"Transmitter location."},{"name":"to","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Receiver location.","examples":["New York, USA"],"title":"To"},"description":"Receiver location."},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"First hour (UTC). Default: the current hour.","title":"Start"},"description":"First hour (UTC). Default: the current hour."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":72,"minimum":1,"description":"Number of hourly steps.","default":24,"title":"Hours"},"description":"Number of hourly steps."},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Mode","description":"Operating mode; sets the required SNR and candidate band frequencies.","default":"ft8"},"description":"Operating mode; sets the required SNR and candidate band frequencies."},{"name":"power","in":"query","required":false,"schema":{"type":"number","maximum":100000.0,"exclusiveMinimum":0.0,"description":"Transmitter power in watts.","default":100,"title":"Power"},"description":"Transmitter power in watts."},{"name":"tx_gain","in":"query","required":false,"schema":{"type":"number","maximum":30.0,"minimum":-20.0,"description":"Transmit antenna gain (dBi). 2.15 = dipole.","default":2.15,"title":"Tx Gain"},"description":"Transmit antenna gain (dBi). 2.15 = dipole."},{"name":"rx_gain","in":"query","required":false,"schema":{"type":"number","maximum":30.0,"minimum":-20.0,"description":"Receive antenna gain (dBi).","default":2.15,"title":"Rx Gain"},"description":"Receive antenna gain (dBi)."},{"name":"noise","in":"query","required":false,"schema":{"$ref":"#/components/schemas/NoiseEnvironment","description":"Receiver site man-made noise (ITU-R P.372).","default":"rural"},"description":"Receiver site man-made noise (ITU-R P.372)."},{"name":"path","in":"query","required":false,"schema":{"enum":["auto","short","long"],"type":"string","description":"Great-circle path; `auto` picks the more reliable.","default":"auto","title":"Path"},"description":"Great-circle path; `auto` picks the more reliable."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Forecast V1 Propagation Forecast Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/propagation/conditions":{"get":{"tags":["Propagation"],"summary":"Band conditions","description":"Per-band status (OPEN / MARGINAL / CLOSED) from the local MUF for NVIS, regional and DX hop ranges,\nor — without `location` — the share of the globe (day side vs. night side) where each band is open for 3000 km hops.","operationId":"conditions_v1_propagation_conditions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":200},{"type":"null"}],"description":"Optional location. Without it, a global day/night summary is returned.","examples":["London, UK","IO91"],"title":"Location"},"description":"Optional location. Without it, a global day/night summary is returned."},{"name":"datetime","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"UTC time (≤ 72 h ahead). Default: now.","title":"Datetime"},"description":"UTC time (≤ 72 h ahead). Default: now."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Conditions V1 Propagation Conditions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/observations/live":{"get":{"tags":["Observations"],"summary":"Live observed paths","description":"Paths heard in the last N minutes, aggregated by 4-character grid squares (square centers given for\nmap lines). Ideal for a real-time \"who hears whom\" map. Cached for 60 seconds.","operationId":"live_v1_observations_live_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"description":"Look-back window in minutes.","default":15,"title":"Minutes"},"description":"Look-back window in minutes."},{"name":"band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Amateur band, e.g. `20m`.","examples":["20m"],"title":"Band"},"description":"Amateur band, e.g. `20m`."},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Mode, e.g. `FT8`, `WSPR`, `CW`.","examples":["FT8"],"title":"Mode"},"description":"Mode, e.g. `FT8`, `WSPR`, `CW`."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["pskreporter","wsprnet"],"type":"string"},{"type":"null"}],"description":"Restrict to one data source.","title":"Source"},"description":"Restrict to one data source."},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`minLon,minLat,maxLon,maxLat` — paths with either end inside.","examples":["-10,35,30,60"],"title":"Bbox"},"description":"`minLon,minLat,maxLon,maxLat` — paths with either end inside."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum number of grid-square paths.","default":2000,"title":"Limit"},"description":"Maximum number of grid-square paths."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Live V1 Observations Live Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/observations/paths":{"get":{"tags":["Observations"],"summary":"Observed propagation between two areas","description":"Reception reports between two areas in both directions (A→B: transmitter near A heard near B), per band,\nwith the most recent reports.","operationId":"paths_v1_observations_paths_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Area A: `lat,lon`, Maidenhead locator or place name.","examples":["Seoul"],"title":"From"},"description":"Area A: `lat,lon`, Maidenhead locator or place name."},{"name":"to","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Area B.","examples":["Tokyo"],"title":"To"},"description":"Area B."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":1500.0,"minimum":50.0,"description":"Radius around each point.","default":500,"title":"Radius Km"},"description":"Radius around each point."},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":6.0,"exclusiveMinimum":0.0,"description":"Look-back window in hours (max 6).","default":1,"title":"Hours"},"description":"Look-back window in hours (max 6)."},{"name":"band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Amateur band, e.g. `20m`.","examples":["20m"],"title":"Band"},"description":"Amateur band, e.g. `20m`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Paths V1 Observations Paths Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/observations/bands":{"get":{"tags":["Observations"],"summary":"Band activity","description":"Which bands are actually in use right now: report counts, active stations and typical/maximum distance.","operationId":"bands_v1_observations_bands_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":200},{"type":"null"}],"description":"Optional area. Without it, worldwide activity is returned.","examples":["Berlin, Germany","JO62"],"title":"Location"},"description":"Optional area. Without it, worldwide activity is returned."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":3000.0,"minimum":50.0,"default":1000,"title":"Radius Km"}},{"name":"role","in":"query","required":false,"schema":{"enum":["rx","tx"],"type":"string","description":"`rx`: what stations in the area hear; `tx`: where stations in the area are heard.","default":"rx","title":"Role"},"description":"`rx`: what stations in the area hear; `tx`: where stations in the area are heard."},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":5,"default":15,"title":"Minutes"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"description":"Mode, e.g. `FT8`, `WSPR`, `CW`.","examples":["FT8"],"title":"Mode"},"description":"Mode, e.g. `FT8`, `WSPR`, `CW`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Bands V1 Observations Bands Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/observations/callsign/{callsign}":{"get":{"tags":["Observations"],"summary":"Reports for a callsign","description":"Who heard a station (or whom it heard), per band, with the current space-weather context.","operationId":"callsign_v1_observations_callsign__callsign__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"callsign","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":24,"examples":["DS1UPG"],"title":"Callsign"}},{"name":"role","in":"query","required":false,"schema":{"enum":["tx","rx"],"type":"string","description":"`tx`: who heard this station; `rx`: whom it heard.","default":"tx","title":"Role"},"description":"`tx`: who heard this station; `rx`: whom it heard."},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":48.0,"exclusiveMinimum":0.0,"default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":300,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Callsign V1 Observations Callsign  Callsign  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AlertOut":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"product_id":{"type":"string","title":"Product Id"},"message_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Code"},"serial":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial"},"issue_time":{"type":"string","format":"date-time","title":"Issue Time"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"noaa_scale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Noaa Scale"},"message":{"type":"string","title":"Message"}},"type":"object","required":["id","source","product_id","message_code","serial","issue_time","category","title","noaa_scale","message"],"title":"AlertOut"},"Attribution":{"properties":{"key":{"type":"string","title":"Key"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"}},"type":"object","required":["key","name","url","license"],"title":"Attribution"},"CurrentResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"solar":{"type":"object","title":"Solar"},"geomagnetic":{"type":"object","title":"Geomagnetic"},"ionosphere":{"type":"object","title":"Ionosphere"},"noaa_scales":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Noaa Scales"},"alerts_last_24h":{"type":"integer","title":"Alerts Last 24H"},"freshness":{"items":{"type":"object"},"type":"array","title":"Freshness"}},"type":"object","required":["generated_at","solar","geomagnetic","ionosphere","noaa_scales","alerts_last_24h","freshness"],"title":"CurrentResponse","example":{"alerts_last_24h":3,"freshness":[{"collector":"swpc.kp","last_success_at":"2026-10-13T00:10:00Z","stale":false}],"generated_at":"2026-10-13T00:12:00Z","geomagnetic":{"ap":{"source":"gfz","time":"2026-10-11T00:00:00Z","value":13.0},"kp":{"g_scale":"G0","source":"swpc","time":"2026-10-12T21:00:00Z","value":2.0}},"ionosphere":{"tec_map_time":"2026-10-12T23:35:00Z"},"noaa_scales":{"G":{"Scale":"0","Text":"none"},"R":{"Scale":"0","Text":"none"},"S":{"Scale":"0","Text":"none"}},"solar":{"sfi":{"source":"swpc","time":"2026-10-12T20:00:00Z","value":123.0},"solar_wind":{"bt":9.8,"bz":-1.64,"density":3.06,"speed":506.4,"time":"2026-10-13T00:08:00Z"},"sunspot_number":{"source":"swpc","time":"2026-10-12T00:00:00Z","value":87.0},"xray":{"class":"B6.1","flux":6.1e-07,"time":"2026-10-13T00:10:00Z"}}}},"DataPoint":{"properties":{"time":{"type":"string","format":"date-time","title":"Time"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"}},"type":"object","required":["time","value"],"title":"DataPoint"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KpSeriesResponse":{"properties":{"metric":{"type":"string","title":"Metric"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"source":{"type":"string","title":"Source"},"attribution":{"$ref":"#/components/schemas/Attribution"},"interval":{"type":"string","title":"Interval"},"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated","description":"Last successful collection from the upstream source."},"latest":{"anyOf":[{"$ref":"#/components/schemas/DataPoint"},{"type":"null"}],"description":"Most recent observation available."},"data":{"items":{"$ref":"#/components/schemas/DataPoint"},"type":"array","title":"Data"},"forecast":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Forecast"}},"type":"object","required":["metric","description","unit","source","attribution","interval","start","end","last_updated","latest","data"],"title":"KpSeriesResponse","example":{"attribution":{"key":"swpc","license":"Public domain (U.S. Government work)","name":"NOAA Space Weather Prediction Center","url":"https://www.swpc.noaa.gov/"},"data":[{"count":3,"max":123.0,"min":122.0,"time":"2026-10-12T00:00:00Z","value":122.7}],"description":"F10.7 cm solar radio flux","end":"2026-10-13T00:00:00Z","interval":"1d","last_updated":"2026-10-13T00:05:12Z","latest":{"time":"2026-10-12T20:00:00Z","value":123.0},"metric":"sfi","source":"swpc","start":"2026-09-13T00:00:00Z","unit":"sfu"}},"Mode":{"type":"string","enum":["ft8","ft4","wspr","cw","ssb","am","rtty","psk31"],"title":"Mode"},"NoiseEnvironment":{"type":"string","enum":["city","residential","rural","quiet"],"title":"NoiseEnvironment"},"PathInfo":{"properties":{"from":{"type":"string","title":"From"},"to":{"type":"string","title":"To"},"from_coordinates":{"items":{"type":"number"},"type":"array","title":"From Coordinates"},"to_coordinates":{"items":{"type":"number"},"type":"array","title":"To Coordinates"},"distance_km":{"type":"number","title":"Distance Km"},"bearing_deg":{"type":"number","title":"Bearing Deg"},"path_type":{"type":"string","title":"Path Type"}},"type":"object","required":["from","to","from_coordinates","to_coordinates","distance_km","bearing_deg","path_type"],"title":"PathInfo"},"PathResponse":{"properties":{"frequency_mhz":{"type":"number","title":"Frequency Mhz"},"datetime":{"type":"string","format":"date-time","title":"Datetime"},"path":{"$ref":"#/components/schemas/PathInfo"},"prediction":{"$ref":"#/components/schemas/Prediction"},"details":{"type":"object","title":"Details"},"bands":{"items":{"type":"object"},"type":"array","title":"Bands"},"observed":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Observed","description":"Real reception reports in the last hour between the two areas (500 km radius), per direction and band. Present only for requests about the current time."},"drivers":{"type":"object","title":"Drivers"},"model":{"type":"object","title":"Model"},"attribution":{"items":{"type":"object"},"type":"array","title":"Attribution"}},"type":"object","required":["frequency_mhz","datetime","path","prediction","details","bands","drivers","model","attribution"],"title":"PathResponse","example":{"bands":[{"availability":"FAIR","band":"20m","frequency_mhz":14.074,"reliability":0.68}],"datetime":"2026-10-13T12:00:00Z","details":{"short_path":{"hops":4,"muf_mhz":14.9,"snr_db_hz":29.6}},"drivers":{"ionosphere_basis":"observed","kp":2.0,"sunspot_number":90.0},"frequency_mhz":14.074,"model":{"limitations":["E-layer and sporadic-E modes are not modelled.","Antenna patterns are approximated by a single gain value.","Future times use same-UT persistence of recent observed maps with a geomagnetic storm correction."],"method":"Simplified ITU-R P.533: F2 hops from observed GloTEC NmF2/hmF2, CCIR 252 D-layer absorption, ITU-R P.372 noise, MUF and SNR variability.","name":"IonoFlux HF path model v0.1"},"path":{"bearing_deg":17.4,"distance_km":11053.4,"from":"Seoul, South Korea","from_coordinates":[37.5667,126.9783],"path_type":"short","to":"New York, United States","to_coordinates":[40.7127,-74.006]},"prediction":{"availability":"FAIR","confidence":"high","fot_mhz":12.67,"muf_mhz":14.9,"recommended_frequencies_mhz":[10.136,14.074,18.1],"reliability":0.68}}},"Prediction":{"properties":{"availability":{"type":"string","enum":["EXCELLENT","GOOD","FAIR","POOR","CLOSED"],"title":"Availability"},"reliability":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Reliability","description":"Probability that the link works at the requested time."},"recommended_frequencies_mhz":{"items":{"type":"number"},"type":"array","title":"Recommended Frequencies Mhz"},"confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence","description":"Confidence in the ionospheric input data."},"muf_mhz":{"type":"number","title":"Muf Mhz"},"fot_mhz":{"type":"number","title":"Fot Mhz","description":"Frequency of optimum traffic (0.85 × MUF)."}},"type":"object","required":["availability","reliability","recommended_frequencies_mhz","confidence","muf_mhz","fot_mhz"],"title":"Prediction"},"SeriesResponse":{"properties":{"metric":{"type":"string","title":"Metric"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"source":{"type":"string","title":"Source"},"attribution":{"$ref":"#/components/schemas/Attribution"},"interval":{"type":"string","title":"Interval"},"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated","description":"Last successful collection from the upstream source."},"latest":{"anyOf":[{"$ref":"#/components/schemas/DataPoint"},{"type":"null"}],"description":"Most recent observation available."},"data":{"items":{"$ref":"#/components/schemas/DataPoint"},"type":"array","title":"Data"}},"type":"object","required":["metric","description","unit","source","attribution","interval","start","end","last_updated","latest","data"],"title":"SeriesResponse","example":{"attribution":{"key":"swpc","license":"Public domain (U.S. Government work)","name":"NOAA Space Weather Prediction Center","url":"https://www.swpc.noaa.gov/"},"data":[{"count":3,"max":123.0,"min":122.0,"time":"2026-10-12T00:00:00Z","value":122.7}],"description":"F10.7 cm solar radio flux","end":"2026-10-13T00:00:00Z","interval":"1d","last_updated":"2026-10-13T00:05:12Z","latest":{"time":"2026-10-12T20:00:00Z","value":123.0},"metric":"sfi","source":"swpc","start":"2026-09-13T00:00:00Z","unit":"sfu"}},"StatisticsResponse":{"properties":{"metric":{"type":"string","title":"Metric"},"unit":{"type":"string","title":"Unit"},"source":{"type":"string","title":"Source"},"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"count":{"type":"integer","title":"Count"},"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"mean":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mean"},"median":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median"},"stddev":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stddev"},"first":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First"},"last":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last"},"change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change","description":"last - first over the period"},"first_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Time"},"last_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Time"}},"type":"object","required":["metric","unit","source","start","end","count","min","max","mean","median","stddev","first","last","change","first_time","last_time"],"title":"StatisticsResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","description":"Your IonoFlux API key.","in":"header","name":"X-API-Key"}}},"tags":[{"name":"Overview","description":"Current conditions in a single call."},{"name":"Solar","description":"Solar flux, sunspots, X-rays and solar wind."},{"name":"Geomagnetic","description":"Kp and Ap indices, including the 3-day Kp forecast."},{"name":"Ionosphere","description":"Global TEC / foF2 / MUF maps and ionosonde observations."},{"name":"Propagation","description":"HF path predictions, hourly forecasts and band conditions."},{"name":"Observations","description":"Observed HF propagation from real reception reports (PSK Reporter, WSPRnet)."},{"name":"Alerts","description":"Space-weather alerts, watches, warnings and NOAA scales."},{"name":"Statistics","description":"Period statistics for any metric."},{"name":"Meta","description":"Data sources, collector health and geocoding."}]}