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
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
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
}
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
}
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
Limits are per key and per plan. Every keyed response carries:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed in the window. |
X-RateLimit-Remaining | Requests left in the window. |
X-RateLimit-Reset | When 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.