API for researchers
Read-only REST access to the data behind the globe: NOAA SWPC storm levels and real-time solar wind, NASA DONKI events, our own storm detection, and CODE's global ionosphere (TEC) maps. Every row names the raw record it came from, so any value can be traced to the exact response we fetched.
Prototype: the views may still change. Data is preliminary where the source says so (column quality_flag).
Access
- Base URL
- Public key
(send as headerapikey; it is public and read-only)- Schema
- send
Accept-Profile: api - Limits
- 1,000 rows per request; page with
limitandoffset. Times are UTC. - Without a key
- The same paths also work at
https://asterionresearchgroup.com/api/<path>, cached for 5 minutes (raw records for a day). Fine for a browser or a quick look; for heavy use, call the base URL above.
Views
| Path | What |
|---|---|
current_conditions | One row per quantity: Kp, G-level, forecast peak, solar wind speed, density, Bz, Bt, L1-to-Earth delay. Each with its time and provenance. |
solar_wind | Last 24 h, 1-minute: speed, density, Bz at L1, with the arrival time at Earth. |
storm_levels | Kp with NOAA G-level: the last 30 days observed plus NOAA's forecast. |
events | Flares, CMEs, shocks, high speed streams, storms (NASA DONKI) and our detections, last 30 days. |
tec_maps | Hourly global TEC maps, last 7 days: 71 × 73 values in 0.1 TECU (see tec_latest for the grid). |
tec_latest | The newest TEC map with its grid: 87.5°N to 87.5°S every 2.5°, 180°W to 180°E every 5°, geocentric latitude, 450 km shell. |
aurora_reach | Geomagnetic pole and the latitude lines aurora typically reaches at the current and forecast storm level. |
geomagnetic_grid | Lines of geomagnetic latitude (0°, ±50°, ±60°, ±70°) around today's dipole pole, as [lon, lat] points. |
tec_forecast | CODE's predicted TEC maps for the hours after the newest observed map (up to 48 h ahead), the newest issue per hour. A prediction, not an observation: classification = predicted. |
gps_elements | The newest orbital elements (CCSDS OMM, for SGP4) of each operational GPS satellite, from CelesTrak; satellites without elements from the last 7 days are left out. |
satellite_drag | Space stations and Planet's small satellites: CelesTrak's elements from the last 3 days, the mean height, and the height change in km a day from their own sets about 3 days apart. Empty until there's history. Not only drag: reboosts and manoeuvres change it too. Also a draft level (0 normal, 1 raised, 2 high): how much thicker the air is than at Kp 1 for 300 to 600 km, a proxy calibrated to a model, not a density. |
swarm_elements | The same for ESA's Swarm A, B and C: CelesTrak's public orbital elements, from the last 3 days. Where they are, not what they measure. |
galileo_elements | The same for CelesTrak's Galileo group, which isn't limited to satellites in service; satellites without elements from the last 14 days are left out. |
forecast_skill | NOAA's and GFZ's Kp forecasts over 30 days, each on its first published version, against the Kp it forecasts: MAE, RMSE, bias, the same for persistence, a skill score against it and G1+ hits, misses and false alarms, per lead and for all leads (lead_bucket null). scope shared keeps the intervals both forecast at that lead. Method forecast-score-1. |
forecast_rolling | For each of the last 30 days: the seven days up to it, per provider, with MAE against persistence. The means are empty under 20 scored values. |
solar_wind_response | The correlation of half-hourly Newell coupling with GFZ's Hp30 at each lag, timed by arrival at Earth and at L1, last 30 days. A correlation over few storms, not a proof. |
source_reliability | Scheduled runs and failed runs per active source and UTC day, last 30 days. A failed run is a failed fetch or a changed format. |
solar_wind_coverage | Minutes of solar wind from NOAA's active spacecraft held per UTC day against those possible, last 30 days. NOAA's active stream skips scattered minutes; other spacecraft aren't used to fill them. |
storm_chains | Storms of the last 90 days traced back through NASA DONKI's links: shock at L1, CMEs, flare, Sun-to-L1 transit time, Earth arrival, minimum Bz and Kp peaks (ours and DONKI's). |
rpc/gnss_check?lat=&lon= | "Is it space weather or my receiver?" for a place: a verdict (space_weather, watch, quiet or unknown), its reasons, and the Kp, Hp30, forecast, shock and TEC it used, with raw ids. Rules of thumb, method gnss-check-1. |
rpc/gnss_risk_map | A level per cell of CODE's TEC grid (0 low, 1 moderate, 2 high, null no value), for the newest observed map, or the one at map_time within the last 7 days, laid out like tec. From the map alone: vertical L1 delay, gradient and hourly change, with the limits used and raw ids. It can't show scintillation and doesn't count the storm level (rpc/gnss_risk does, at a place). Rules of thumb, method gnss-map-1. |
cme_arrivals | CMEs of the last 90 days with our drag-based arrival prediction at Earth and its range (Earth-directed ones), the observed arrival from the storm chains, and the error in hours. |
kp_forecast_range | NOAA's current Kp forecast with an 80 % range from NOAA's own errors at the same lead time over 30 days (each forecast scored as first published). |
flare_reliability | How reliable NOAA's M- and X-class flare probabilities per region were over 90 days, in 10 % bins: mean forecast vs observed frequency (outcomes from DONKI). |
aurora_edge | Our analysis of ESA Swarm: the measured edge of the auroral oval per crossing, last 45 days, about 5 days behind, with the storm level and our reach line. © ESA 2026 · Data provided by the European Space Agency. Non-commercial use; Swarm's own values and raw records aren't served. |
rpc/location?lat=&lon= | For a place (GPS degrees): geomagnetic latitude, which storm level reaches it, now and forecast, TEC and GPS L1 delay. |
storm_library | The famous-storms library: October 2024, May 2024, Halloween 2003, March 1989, each with its window, the sources we hold for it, what the record doesn't have, and a default place. Replayed on the Storms page. |
Research queries
For time series, the catalogue, and the raw responses behind every value. The functions take a time window and return at most 31 days per call; page through longer periods.
| Path | What |
|---|---|
measurement_types | What exists: one row per source, type and series, with unit, first and last time, row count and quality flags. Start here. |
sources | Where each value comes from: provider, feed, endpoint, reference frame, the last successful fetch and the result of the last run. |
rpc/measurements?type=&start=&stop= | One measurement type in a window. Optional: source_id, series, versions (latest, the default, or all for every stored revision), bucket. |
rpc/derived_values?type=&start=&stop= | Derived solar wind physics (flow pressure, electric field, Newell coupling and more; see measurement_types, source derived). Optional: at_earth=true (re-timed to the arrival at Earth), bucket. |
rpc/tec_series?lat=&lon=&start=&stop= | TEC at a place (GPS degrees) for every hourly map in the window, with the GPS L1 delay in metres. Observed maps only. |
rpc/raw_record?raw_id= | The response we stored for a raw record, exactly as stored, with its URL, fetch time and SHA-256 hash. Payloads over 1 MB come without their body, with a note. |
rpc/events_between?start=&stop= | NASA DONKI's events (flares, CMEs, shocks, streams, storms) starting in any window, for example a storm of the library; events covers the last 30 days only. |
rpc/place_during?lat=&lon=&start=&stop= | A place during a window: every 3-hour Kp interval (GFZ's Kp, definitive or nowcast) with its G-level, the place's geomagnetic latitude at the time, the level that reaches it, and whether this one did. |
rpc/aurora_during?start=&stop= | The aurora reach line for every 3-hour Kp interval in a window (GFZ's Kp): G-level, the geomagnetic latitude it reaches, the pole of that time, and both lines (none below G1). Our rule from Kp, not an observed aurora. |
rpc/tec_maps_between?start=&stop= | The whole TEC maps of a past window, at most 1 day per call, oldest first, in 0.1 TECU with their raw record. Observed maps only; the grid is in tec_latest. |
Rules
- Windows are half-open,
start <= t < stop, ISO times such as2026-10-20T00:00Z, at most 31 days. A longer window, an unknown bucket or a badversionsgets HTTP 400 with the reason. - Buckets (
bucket=1 min,10 min,1 houror3 hours; write the space as%20): one row per bucket, aligned to UTC, with the mean asvalue,value_min,value_max, the countn, the worst quality flag and every raw record used (raw_ids). - Revisions: NOAA revises preliminary values.
versions=latestgives each time once, as now known;versions=allgives every version we stored, each with the raw record it first appeared in. - Paging: add
limit=1000&offset=0, thenoffset=1000, and so on (calling Supabase directly, aRange: 0-999header works too; throughasterionresearchgroup.com/api/onlylimit/offsetdo). AddPrefer: count=exactto get the total in theContent-Rangeheader. - CSV: send
Accept: text/csv. With therpc/functions, leave outselect=for CSV: the header row would not match the columns.
Examples
curl
Python
Filters follow PostgREST: ?measurement_type=eq.proton_speed, ?observed_at_l1=gte.2026-10-21T00:00Z, ?order=start_time.desc, ?select=col1,col2. Add Accept: text/csv for CSV.
Put it on your site
A small widget with the current Kp and storm level, from NOAA. It uses no cookies and no tracking, loads when it scrolls into view, and refreshes every 30 minutes while it can be seen. It isn't a warning service.
HAPI
/hapi is a read-only HAPI 3.1 server, the standard for heliophysics time series, so tools such as hapiclient, Autoplot and SpacePy can read our data directly. Start with /hapi/catalog. It has solar wind and the magnetic field at L1, Kp, Hp30, Hp60, and GOES X-rays and protons, with the newest version of each value.
- Provenance: each value
xhasx_qualityandx_raw_idbeside it. Pass the raw id torpc/raw_recordto see the response it came from. - Missing values:
-1.0e31in this format only, asinfodeclares. - Limits: at most 7 days a request for 1-minute data, 14 for 5-minute and 31 for the rest.
Sources and credit
NOAA Space Weather Prediction Center (real-time solar wind, Kp and forecast), NASA CCMC DONKI (events), CODE, Astronomical Institute of the University of Bern (global ionosphere maps), GFZ Potsdam (Kp, Hp30 and Hp60, CC BY 4.0), NASA/JPL (close approaches and fireballs), NASA SPDF (OMNI, for the storm library), IGRF-14 (IAGA) for geomagnetic coordinates, CelesTrak (GPS orbital elements). Please credit the original source along with the Space Data API.