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: showibonav.aeroor "Decoded by Ibosoft" wherever decoded output is displayed
Data sources: none — decodes the message supplied in the request.
Last updated: 17 OCT 2026About 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 (
nullor[]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) andRemarksare 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/TEMPOblock is not decoded and is listed as oneUndecodable elementsentry; 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 underUndecodable 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.