WeatherData

Test the API in three calls

Make a key, ask for a station, a window of readings and a day's extremes, and read what comes back. Each call below is one operation of the contract.

Contract: openapi.yaml and the reference. Keys: the dashboard.

Step 1

Get a key

Sign in to the dashboard, create a key and copy it. Keep it in an environment variable:

export WEATHERDATA_API_KEY="your-key"

Every call below sends it as Authorization: Bearer <key>. The base URL is https://api.weather-data.net/v1.

Step 2

Three calls

A station

curl -H "Authorization: Bearer $WEATHERDATA_API_KEY" \
  https://api.weather-data.net/v1/stations/KMIA

A station carries its coordinates and the standard-time offset that defines its station day:

{
  "id": "KMIA",
  "icao": "KMIA",
  "name": "Miami International Airport",
  "network": "ASOS",
  "latitude": 25.7881,
  "longitude": -80.3169,
  "elevation_m": 2.7,
  "standard_utc_offset_hours": -5
}

Readings of one source

curl -H "Authorization: Bearer $WEATHERDATA_API_KEY" \
  "https://api.weather-data.net/v1/stations/KMIA/observations?source=asos_5min&from=2026-10-24T18:00:00Z&to=2026-10-24T19:00:00Z"

Each reading says when it was observed and when WeatherData received it; the difference is the delay you would have lived with. When more readings remain, pass next_cursor as cursor to read the next page.

{
  "readings": [
    {
      "station": "KMIA",
      "observed_utc": "2026-10-24T18:55:00Z",
      "received_utc": "2026-10-24T19:06:48Z",
      "temp_f": 84.2,
      "temp_c": 29.0
    }
  ],
  "next_cursor": null
}

A day's extremes

curl -H "Authorization: Bearer $WEATHERDATA_API_KEY" \
  "https://api.weather-data.net/v1/stations/KMIA/extremes?date=2026-10-24"

The station day is the station's local standard-time calendar day. status is running while the day is open, day_closed once it has ended and no report exists yet, and settled once the climate report is in.

{
  "station": "KMIA",
  "date": "2026-10-24",
  "as_of_utc": "2026-10-24T19:06:48Z",
  "high": { "value_f": 84, "last_observation_utc": "2026-10-24T18:55:00Z", "status": "running" },
  "low":  { "value_f": 71, "last_observation_utc": "2026-10-24T18:55:00Z", "status": "running" }
}

The shapes follow the contract's schemas; the values are illustrative.

Step 3

Rate limits and errors

Limits are per key and per plan. Every keyed response carries:

HeaderMeaning
X-RateLimit-LimitRequests allowed in the window.
X-RateLimit-RemainingRequests left in the window.
X-RateLimit-ResetWhen the window resets, in unix seconds.

GET /sources and GET /status are public and carry none. A limited request returns 429 with Retry-After. Errors are application/problem+json (RFC 7807) with type, title, status and detail:

{
  "type": "https://weather-data.net/problems/rate-limited",
  "title": "Rate limit exhausted",
  "status": 429,
  "detail": "Try again after the time in Retry-After."
}

Next: the SDKs do the key, paging, limits and retries for you, and the Postman guide runs these calls from a collection.