BYTETOOLS

Aviation Weather Center (METAR) API

Free official METAR and TAF API with no key: decoded aviation weather for any airport worldwide, with raw observation text, cloud layers and flight category. Tested example included.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Aviation Weather Center (METAR) API?

The NOAA Aviation Weather Center API is a free, key-free service returning METAR observations, TAF forecasts, PIREPs and SIGMETs. Requesting JSON gives both the raw coded observation and a fully decoded form with temperature, wind, visibility, cloud layers and flight category.

METAR is the international standard for airport weather observations and it is famously unreadable — `METAR KJFK 210751Z 36014KT 10SM BKN010 OVC019 18/16 A2998` is a complete weather report if you have been trained to read it. This API hands you both halves: the raw string for anyone who wants it, and every element already parsed into named numeric fields.

The `fltCat` field is the one to build alerts on. It collapses ceiling and visibility into the four categories pilots actually plan around — VFR, MVFR, IFR and LIFR — which is a judgement you would otherwise have to encode yourself from the cloud layers and visibility. Note that `visib` is a string rather than a number, because "10+" means "ten statute miles or more" and there is no numeric way to say that. `obsTime` is a Unix timestamp while `reportTime` is ISO 8601, and observations are typically issued once an hour just before the hour.

Quick facts

Base URL
https://aviationweather.gov/api/data
Authentication
No API key or account. US federal government service; data is in the public domain.
Rate limit
No published quota. Observations update roughly hourly, so polling more often than that gains nothing.
Pricing
Free.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Aviation Weather Center (METAR) API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch the current decoded METAR for an airport

GET https://aviationweather.gov/api/data/metar?ids=KJFK&format=json

curl
curl 'https://aviationweather.gov/api/data/metar?ids=KJFK&format=json'
JavaScript (fetch)
const res = await fetch("https://aviationweather.gov/api/data/metar?ids=KJFK&format=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://aviationweather.gov/api/data/metar?ids=KJFK&format=json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
[
  {
    "icaoId": "KJFK",
    "receiptTime": "2026-08-21T07:54:13.147Z",
    "obsTime": 1787298660,
    "reportTime": "2026-08-21T08:00:00.000Z",
    "temp": 17.8,
    "dewp": 16.1,
    "wdir": 360,
    "wspd": 14,
    "visib": "10+",
    "altim": 1015.3,
    "slp": 1015.2,
    "qcField": 12,
    "metarType": "METAR",
    "rawOb": "METAR KJFK 210751Z 36014KT 10SM BKN010 OVC019 18/16 A2998 RMK AO2 SLP152 T01780161 $",
    "lat": 40.6392,
    "lon": -73.7639,
    "elev": 3,
    "name": "New York/JF Kennedy Intl, NY, US",
    "cover": "OVC",
    "clouds": [
      {
        "cover": "BKN",
        "base": 1000
      },
      {
        "cover": "OVC",
        "base": 1900
      }
    ],
    "fltCat": "MVFR"
  }
]

Parameters

ParameterTypeRequiredDescription
idsqueryRequiredComma-separated ICAO station identifiers. Several airports can be requested at once. KJFK,EGLL
formatqueryRequired`json` for decoded output, `raw` for the coded text, `xml` and `geojson` also available. json
hoursqueryOptionalHow many hours of history to return. Defaults to the most recent observation only. 6
bboxqueryOptionalBounding box as `minLat,minLon,maxLat,maxLon` to fetch every station in an area. 40,-75,42,-73
(taf)pathOptional`/taf` returns terminal aerodrome forecasts using the same parameters. taf
(pirep, airsigmet)pathOptionalPilot reports and significant meteorological information, on their own endpoints.

Response fields

icaoIdstring
ICAO station identifier the observation belongs to.
rawObstring
The complete raw METAR string, for display to pilots or for your own decoding.
obsTime / reportTimeinteger / string
Observation time as Unix seconds and report time as ISO 8601. Two different formats in one object.
temp / dewpfloat
Temperature and dew point in Celsius. The spread between them indicates humidity and fog risk.
wdir / wspdinteger
Wind direction in degrees true and speed in knots. A direction of 0 with non-zero speed means variable.
visibstring
Visibility — a string, because "10+" means ten statute miles or more.
altim / slpfloat
Altimeter setting and sea-level pressure in hectopascals.
cloudsarray
Cloud layers, each with `cover` (FEW, SCT, BKN, OVC) and `base` in feet above ground.
fltCatstring
Flight category derived from ceiling and visibility: VFR, MVFR, IFR or LIFR.
lat / lon / elevfloat
Station position and elevation in metres.
namestring
Human-readable station name, for example "New York/JF Kennedy Intl, NY, US".

What you can build with the Aviation Weather Center (METAR) API

  • Show current conditions at an airport on a flight-planning page
  • Alert when an airport drops below VFR conditions
  • Log weather at departure and arrival for incident or delay analysis
  • Feed accurate airport-level observations into an aviation dashboard
  • Correlate flight delays with ceiling and visibility

Common errors and how to fix them

Empty array for a valid airport

The station reports intermittently, or the identifier is IATA rather than ICAO.

Fix: Use four-letter ICAO codes — KJFK, not JFK. Small aerodromes may only issue observations during staffed hours.

visib will not parse as a number

It is deliberately a string, because "10+" is not numeric.

Fix: Handle the plus suffix explicitly. Values below ten can be fractions such as "1/2", which also need parsing rather than casting.

Two different time formats in one object

`obsTime` is Unix seconds and `reportTime` is ISO 8601.

Fix: Normalise both on ingest. Times are UTC throughout; METAR has no concept of local time.

CORS error in the browser

The service sends no Access-Control-Allow-Origin header.

Fix: Fetch it server-side. Because observations only change hourly, a cached server-side copy is the right design anyway.

Aviation Weather Center (METAR) API — frequently asked questions

Is the aviation weather API free?

Yes. It is run by the NOAA Aviation Weather Center with no key or account, and the data is US federal government work in the public domain.

What does the fltCat field mean?

It is the flight category derived from ceiling and visibility: VFR for good conditions, MVFR marginal, IFR instrument conditions and LIFR low instrument conditions. It saves you encoding those thresholds yourself.

How often do METARs update?

Roughly hourly, usually issued shortly before the hour, with special observations (SPECI) inserted when conditions change sharply. Polling more frequently than every fifteen minutes returns the same report.

Does it cover airports outside the United States?

Yes. The service redistributes the global METAR exchange, so major international airports are covered. Reporting frequency and completeness vary by national meteorological service.

Tools that pair with this API

Aviation Weather Center (METAR) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.