Public · No API key required

MSDS Open Data
API

Programmatic access to open atmospheric data from Midwest Stratospheric Data Systems — Casey ground weather, high-altitude flight products, and curated upper-air indexes.

Quick start

Works today

Daily ground weather is published as stable JSON files. Fetch any day by date:

curl -sL \
  https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/2026-08-02.json
Stable catalog (recommended)

Start here for discovery. The catalog lists every public dataset, status, and access path.

GET /api/v1/catalog.json

# Current static mirror:
https://midwestsds.com/api/v1/catalog.json

Base URL, versioning & rules

Base URL
https://midwestsds.com/api/v1
Version
v1 (current)
Auth
None (public tier)
Format
JSON · UTF-8
No API key is required for standard scientific, educational, and personal use. Please set a descriptive User-Agent (e.g. MyResearchBot/1.0 (contact@example.edu)).
Rate guidance: keep requests polite (roughly ≤ 1 req/s sustained for automated clients). Burst is fine for interactive use. Heavy bulk downloads should use the GitHub repository archives instead of repeated API calls.
CORS: public endpoints are intended to be readable from browser applications. If you hit restrictions while prototyping, use the GitHub raw URLs or a small server-side proxy.
Stability: paths under /api/v1/ will not break without a new major version. Deprecated endpoints will be announced on this page and kept for a reasonable overlap period.

Endpoints

Live endpoints return real data today. Planned endpoints define the contract for flight products after the X2Griffon maiden launch and for convenience wrappers around the static files.

GET
/api/v1/catalog.json Live

Machine-readable catalog of all public MSDS datasets, status, and access links.

Example response (abridged)
{
  "api_version": "1.0",
  "provider": "Midwest Stratospheric Data Systems",
  "license": "CC BY 4.0 (attribution required)",
  "attribution": "Midwest Stratospheric Data Systems (midwestsds.com)",
  "contact": "launchcontrol@midwestsds.com",
  "datasets": [
    {
      "id": "ground-weather-casey",
      "title": "Casey, IL Ground Weather",
      "type": "timeseries",
      "frequency": "daily",
      "status": "active",
      "latest": "/api/v1/ground/latest",
      "base": "https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/"
    },
    {
      "id": "x2griffon-flights",
      "title": "X2Griffon High-Altitude Flight Data",
      "status": "coming_soon",
      "first_expected": "2026-09-19"
    }
  ]
}
GET
/api/v1/ground/latest Live (via static)

Most recent daily ground weather file for Casey, Illinois (redirect or alias to today’s dated JSON).

Current working URL
https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/{YYYY-MM-DD}.json

Replace {YYYY-MM-DD} with the America/Chicago calendar date (e.g. 2026-08-02). Files are usually published once per day after automated collection.

GET
/api/v1/ground/{date} Planned wrapper

Convenience path for a single day. date is ISO-8601 calendar date (YYYY-MM-DD in America/Chicago.

GET
/api/v1/flights Planned

List of publicly released high-altitude flights (metadata only). Empty until first X2Griffon data release.

Intended response shape
{
  "flights": [
    {
      "id": "x2griffon-2026-09-19",
      "name": "X2Griffon Maiden",
      "launch_date": "2026-09-19",
      "site": "Casey, Illinois",
      "status": "released",
      "href": "/api/v1/flights/x2griffon-2026-09-19"
    }
  ]
}
GET
/api/v1/flights/{id} Planned

Flight metadata plus links to profiles, tracks, and raw packages.

Related resources (planned)
  • GET /api/v1/flights/{id}/profile  — vertical T / H / P / wind
  • GET /api/v1/flights/{id}/track  — GeoJSON trajectory
  • GET /api/v1/flights/{id}/summary  — human-readable flight summary

Ground weather object

Every daily file follows this structure. Units are US customary for local usability (°F, mph, inches).

{
  "dataset": "Midwest Stratospheric Data Systems Ground Weather Data",
  "location": {
    "name": "Casey, Illinois",
    "latitude": 39.2992,
    "longitude": -87.9925,
    "elevation_m": 200,
    "timezone": "America/Chicago"
  },
  "source": {
    "provider": "Open-Meteo",
    "license": "CC BY 4.0",
    "attribution": "Weather data by Open-Meteo.com"
  },
  "collection": {
    "date": "2026-08-02",
    "collected_at_local": "2026-08-02T14:45",
    "collected_at_utc": "2026-08-02T19:45:00Z"
  },
  "current": {
    "temperature_2m_f": 78.6,
    "relative_humidity_2m_pct": 64,
    "pressure_msl_hpa": 1008.7,
    "wind_speed_10m_mph": 14.7,
    "wind_direction_10m_deg": 16,
    "weather_description": "Clear sky"
  },
  "daily": {
    "temperature_2m_max_f": 79.8,
    "temperature_2m_min_f": 68.0,
    "precipitation_sum_in": 0.094,
    "wind_speed_10m_max_mph": 14.1
  },
  "units": {
    "temperature": "°F",
    "precipitation": "inch",
    "wind_speed": "mph",
    "pressure": "hPa"
  }
}

Code examples

cURL — today’s ground file
DATE=$(TZ=America/Chicago date +%F)
curl -sL \
  -H "User-Agent: MyResearchBot/1.0 (contact@example.edu)" \
  "https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/${DATE}.json" \
  | jq '.current.temperature_2m_f, .daily.temperature_2m_max_f'
JavaScript (browser or Node)
const date = new Intl.DateTimeFormat('en-CA', {
  timeZone: 'America/Chicago',
  year: 'numeric', month: '2-digit', day: '2-digit'
}).format(new Date());

const url = `https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/${date}.json`;

const res = await fetch(url);
const data = await res.json();

console.log(data.location.name, data.current.temperature_2m_f + '°F');
Python
import json
from datetime import datetime
from zoneinfo import ZoneInfo
from urllib.request import urlopen, Request

date = datetime.now(ZoneInfo("America/Chicago")).strftime("%Y-%m-%d")
url = f"https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/{date}.json"

req = Request(url, headers={"User-Agent": "MyResearchBot/1.0 (contact@example.edu)"})
with urlopen(req) as r:
    data = json.load(r)

print(data["location"]["name"], data["current"]["temperature_2m_f"], "°F")

Static catalog file

Until a dynamic /api/v1/ service is deployed, publish this file at /api/v1/catalog.json on the site (or as a GitHub Pages / raw file). Clients should prefer the catalog for discovery.

{
  "api_version": "1.0",
  "provider": "Midwest Stratospheric Data Systems",
  "homepage": "https://www.midwestsds.com",
  "data_hub": "https://www.midwestsds.com/portal.html",
  "license": "CC BY 4.0 (attribution required)",
  "attribution": "Midwest Stratospheric Data Systems (midwestsds.com)",
  "contact": "launchcontrol@midwestsds.com",
  "globe_registration": "GO-4VW9B",
  "repositories": {
    "msds_data": "https://github.com/Midwest-Stratospheric/msds-data",
    "igdr": "https://github.com/Midwest-Stratospheric/International-Ground-Data-Repository"
  },
  "datasets": [
    {
      "id": "ground-weather-casey",
      "title": "Casey, IL Ground Weather",
      "description": "Daily surface weather observations for the MSDS home base (Casey, Illinois).",
      "type": "timeseries",
      "frequency": "daily",
      "status": "active",
      "location": {
        "name": "Casey, Illinois",
        "latitude": 39.2992,
        "longitude": -87.9925
      },
      "access": {
        "pattern": "https://raw.githubusercontent.com/Midwest-Stratospheric/msds-data/main/ground-weather/daily/{date}.json",
        "format": "json",
        "browse": "https://github.com/Midwest-Stratospheric/msds-data/tree/main/ground-weather/daily"
      },
      "source_note": "Meteorological values from Open-Meteo (CC BY 4.0); compilation by MSDS."
    },
    {
      "id": "x2griffon-flights",
      "title": "X2Griffon High-Altitude Flight Data",
      "description": "Vertical profiles, GPS tracks, telemetry, and imagery metadata from MSDS near-space missions.",
      "type": "flight_package",
      "status": "coming_soon",
      "first_expected": "2026-09-19",
      "access": {
        "planned_base": "/api/v1/flights",
        "repository": "https://github.com/Midwest-Stratospheric/msds-data/tree/main/flights"
      }
    },
    {
      "id": "igdr",
      "title": "International Ground Data Repository indexes",
      "description": "Daily curated snapshots pointing at NOAA IGRA and related public upper-air sources.",
      "status": "active",
      "access": {
        "repository": "https://github.com/Midwest-Stratospheric/International-Ground-Data-Repository"
      }
    }
  ]
}

Attribution & license

Required attribution

When you use MSDS-compiled datasets, please credit:

Midwest Stratospheric Data Systems (midwestsds.com)
Ground weather meteorological values

Raw meteorological numbers originate from Open-Meteo (CC BY 4.0). Attribute Open-Meteo as well when publishing derived products that rely on those values.

NOAA IGRA / upper-air

Cite the original NOAA NCEI product when using IGRA data, for example:

Durre et al. (2016) Integrated Global Radiosonde Archive (IGRA), Version 2. NOAA National Centers for Environmental Information. DOI:10.7289/V5X63K0Q.

License intent

MSDS open data is intended for research, education, and public use with attribution. See the Data Disclosure & Use Policy for formal terms. Commercial redistribution at scale should contact MSDS first.

Roadmap

Now
  • • Daily ground JSON on GitHub
  • • Static catalog document
  • • This API reference page
  • • Data Hub UI
Next
  • • Hosted /api/v1/catalog.json
  • /ground/latest convenience path
  • • Cloudflare Worker or equivalent front door
  • • OpenAPI 3 description file
After first flight
  • /flights list + detail
  • • Profile & track endpoints
  • • CSV dual format option
  • • Optional higher-rate keys

Support & contact

Questions about data access, attribution, or planned endpoints: launchcontrol@midwestsds.com

Browse the interactive Data Hub: midwestsds.com/portal.html

Source repositories: msds-data · IGDR