Skip to main content
GET https://api.metar.ws/v1/history/observations returns archived METAR and SPECI reports for one or more stations, going back to 2005-01-01 wherever the underlying archive covers that station. This is a plain request/response REST endpoint, not a subscription: point it at a station and a time range and get reports back directly, with no live updates.
Unlike the live channels, historical queries are available starting on the Sandbox plan. Sandbox is throttled to 1 request/second — enough to explore the API, not to bulk-export data. See Rate limits below.

Authentication

Historical queries use the same API key as the WebSocket stream, sent as a bearer token:
No separate credential is needed. The endpoint reads from the same key store the stream reads from, so revoking a key in the portal takes effect immediately here too.

Sample request

Getting METAR and SPECI reports for EDDM on 1 August 2026:

Sample response

decoded is only populated when include requests it and the report parsed cleanly; check parseStatus before relying on it. It follows the same field names as the live METAR Observations channel.

Query parameters

from is inclusive and to is exclusive. All timestamps, in both the request and the response, are UTC in RFC-3339 / ISO 8601 format.

Response fields

Each element of data is one archived report: meta describes the page and the account making the request:
An empty data array with coverage.status: "none" means the archive has nothing for that station and range — not that the weather was calm or unreported. Check coverage before concluding there were no observations.

Pagination

Requests page through (observedAt, station, type) order. When meta.hasMore is true, repeat the request with the same filters plus cursor set to meta.nextCursor. A cursor is tied to the filters it was issued with; changing stations, from, to, type, or include between pages is rejected rather than silently reinterpreted.

Rate limits

Every response carries X-RateLimit-Limit and X-RateLimit-Remaining headers, and the same numbers are mirrored in meta.rateLimit. Exceeding the limit returns 429 Too Many Requests with a Retry-After header.

Coverage

The archive is backfilled from the open sources and kept in metar.ws’s own storage, so requests never hit that source directly. Coverage isn’t uniform: stations actively carried by the live stream are fully backfilled to 2005-01-01 (or the station’s period of record, if shorter), while the rest of the roster fills in gradually as the archive grows. Always check meta.coverage rather than assuming a station’s history is complete.

Next: Plans & Limits

See how historical rate limits compare with the live stream’s connection and channel limits.