METAR / SPECI (FAA)

Required roles: AIS PIB API — Roles
Base endpoint: https://ais-pib-api.ibosoft.net.tr:2087/opmet-decoder-metar-speci-faa
Reference documents: FAA AIM, Basic (20/02/25) with Change 1 (07/08/25) · FAA Aviation Weather Handbook FAA-H-8083-28 (2024)
Attribution: show ibonav.aero or "Decoded by Ibosoft" wherever decoded output is displayed
Data sources: none — decodes the message supplied in the request.
Last updated: 17 OCT 2026

About the reference documents: Related Documents and Resources

Decodes a METAR or SPECI report in the U.S. format (statute miles, feet, inches of mercury, U.S. remarks) into readable fields. Optionally returns machine-readable values (parsed) and the position of every decoded token (positions).

The format is that of AIM 7-1-28 and FAA Aviation Weather Handbook 24.4.3. For ICAO format reports use METAR / SPECI (ICAO); MET Format Check tells which decoder fits an aerodrome.


Endpoints

POST /opmet-decoder-metar-speci-faa/decode?parsed=false
Content-Type: application/json

{ "raw": "<METAR or SPECI text>" }

Parameters

Parameter In Default Description
raw body — Report text, at least 10 characters. Line breaks, extra spaces, lower case and a final = are accepted.
parsed query false true: add the parsed object with machine-readable values

How the format is processed

  • Field names and wording follow the AIM and the FAA Aviation Weather Handbook: the U.S. element names (Station identifier, Sky condition, Altimeter …), U.S. units (kt, SM, ft, ft AGL, inHg; sea-level pressure in hPa) and the handbook's remark meanings.
  • Mandatory elements are always in the output (null or [] when missing); conditional elements only when present.
  • Lists: Runway visual range (one per runway), Present weather (up to three groups), Sky condition (one per layer) and Remarks are arrays.
  • Body and remarks are split at RMK. Known remarks (station type, peak wind, wind shift, lightning, begin/end times of precipitation, sea-level pressure, additive data, sensor status …) are decoded one entry per remark.
  • No trend forecast: a U.S. METAR has no trend group. A NOSIG / BECMG / TEMPO block is not decoded and is listed as one Undecodable elements entry; its groups never appear as observed values.
  • ICAO-format groups (e.g. visibility in metres such as 8000) are not part of the U.S. format and are listed under Undecodable elements — use the ICAO decoder for such reports.
  • Undecodable groups are not guessed; neighbouring ones form one entry.

For the full list of groups and remarks, see AIM 7-1-28 and FAA Aviation Weather Handbook 24.4.3.

Response

Example — AIM 7-1-28:

METAR KBNA 281250Z 33018KT 290V360 1/2SM R31/2700FT SN BLSN FG VV008 00/M03 A2991 RMK RAE42SNB42
{
  "Type of report": "METAR",
  "Station identifier": "KBNA",
  "Date and time of report": "Day 28, 12:50 UTC",
  "Wind": "18 kt from 330°T",
  "Wind direction variability": "wind direction varying from 290°T to 360°T",
  "Visibility": "1/2 SM",
  "Runway visual range": ["R31: 2700 ft"],
  "Present weather": ["Moderate snow", "Blowing snow", "Fog"],
  "Sky condition": ["Indefinite ceiling 800 ft"],
  "Temperature": "0°C",
  "Dew point": "-3°C",
  "Altimeter": "29.91 inHg",
  "Remarks": ["Rain ended at 42 past the hour", "Snow began at 42 past the hour"],
  "positions": [{"start": 0, "end": 5}, "…"],
  "raw": "METAR KBNA 281250Z …"
}
Key Description
element keys Decoded elements, in report order
Remarks Decoded remarks, one entry per remark
Undecodable elements Groups that do not follow the U.S. format (only when there are any)
positions Character spans {start, end} in the normalized message (single spaces, upper case, no final =), one per decoded value in output order (each remark has its own), then one per undecodable entry. When one token gives two values (e.g. 00/M03) the span is repeated.
raw The message as received
parsed Only with parsed=true (see below)

parsed

Field Type Description
utc_day, utc_time int, string Day and time of the report ("HHMM")
wind_direction int, "variable", null Degrees true; "variable" for VRB; null for calm
wind_speed, wind_speed_unit int, string Speed and "KT"
wind_gust_speed, wind_gust_speed_unit int, string Gust, if reported
wind_variable_direction_1, wind_variable_direction_2 int Extremes of the directional variation
visibility string Decoded visibility
lowest_cloud_base, lowest_cloud_base_unit int, string Lowest cloud base in "FT" (vertical visibility excluded)
special_condition string "CAVOK", "NSW" or null
qnh, qnh_unit float, string Altimeter setting and "inHg" (or "hPa" for a Q group)
temperature, dewpoint (+ _unit) float, string °C

All fields are null when the value is not in the report.

Errors

Code Meaning
400 The message could not be parsed at all; detail explains why
422 raw is missing or shorter than 10 characters

An undecodable group is not an error: the response is 200 and the group is listed under Undecodable elements.