> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metar.ws/llms.txt
> Use this file to discover all available pages before exploring further.

# METAR Observations

> Official METAR reports for roughly 50 stations across four continents, delivered within milliseconds of publication.

Subscribe to `metar.obs.<icao>` to receive official METAR reports for a station, keyed by its lowercase ICAO code. Coverage spans 50+ stations across four continents, including every resolving station used by Polymarket's highest-temperature markets and more.

New reports typically publish 1 to 5 minutes after the observation time, and reach subscribers within milliseconds of the poller picking them up. The station list grows over time, so subscribing to a station that isn't covered yet simply fails with a `channel_format` error.

<Note>
  `metar.obs.<icao>` requires a Starter plan or higher. On a Sandbox key, these channels respond with `permission_denied`.
</Note>

## Sample event

```json theme={null}
{
    "type": "publication",
    "channel": "metar.obs.eglc",
    "data": {
          "station": "EGLC",
          "temp_c": "25",
          "report_time": "2026-07-12T18:20:00Z",
          "raw": "METAR EGLC 121820Z AUTO 08019KT 9999 NCD 25/04 Q1024",
          "dewp_c": "4",
          "wdir": 80,
          "wspd_kt": 19,
          "visib_m": 9999,
          "altim_hpa": 1024
    }
}
```

## Fields always present

| Field         | Type   | Notes                                                                                                           |
| ------------- | ------ | --------------------------------------------------------------------------------------------------------------- |
| `station`     | string | Uppercase ICAO code of the reporting station, e.g. `EGLC`                                                       |
| `temp_c`      | string | Temperature in degrees Celsius, as a decimal string so precision survives; parse with a decimal type, not float |
| `report_time` | string | RFC-3339 UTC observation time taken from the METAR report                                                       |
| `raw`         | string | The unparsed METAR text; always authoritative                                                                   |

## Fields parsed from the report

These fields follow the naming used by NOAA's aviationweather.gov METAR JSON, with explicit unit suffixes. Each one is omitted when the corresponding group is absent from the report or not machine-parseable, so read them defensively.

| Field       | Type   | Notes                                                                        |
| ----------- | ------ | ---------------------------------------------------------------------------- |
| `dewp_c`    | string | Dew point in degrees Celsius, decimal string like `temp_c`                   |
| `wdir`      | int    | Wind direction in degrees true; omitted when variable                        |
| `wdir_vrb`  | bool   | `true` when wind direction is variable (VRB)                                 |
| `wspd_kt`   | int    | Wind speed in knots; MPS reports are converted                               |
| `wgst_kt`   | int    | Gust speed in knots; omitted when there is no gust group                     |
| `visib_m`   | int    | Prevailing visibility in metres; `9999` means 10 km or more                  |
| `cavok`     | bool   | `true` for CAVOK reports, which implies 10 km visibility and no cloud layers |
| `altim_hpa` | int    | QNH pressure in hPa; inHg reports are converted                              |
| `wx`        | string | Present weather codes, space-joined, e.g. `-RA BR`                           |
| `clouds`    | array  | Cloud layers in report order, e.g. `[{"cover":"BKN","base_ft":1200}]`        |

<Card title="Next: D-ATIS Fast Lane" icon="tower-broadcast" href="/channels/atis-fast-lane">
  See how the Pro-only ATIS channel gets you weather minutes earlier.
</Card>
