TAF (ICAO)
Required roles:
AIS PIB API— Roles
Base endpoint:https://ais-pib-api.ibosoft.net.tr:2087/opmet-decoder-taf-icao
Reference documents: ICAO Doc 10157 PANS-MET, Ed. 1 (27/11/25) · ICAO Doc 8400 PANS-ABC, Ed. 9, Amend. 33 (8/11/18)
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 an aerodrome forecast (TAF) into readable fields, one box per forecast group, following the PANS-MET template. Also returns the position of every decoded token in the message (positions).
The format is that of PANS-MET Appendix 4 (template Table A4-1, change and time indicators Table A4-2). To get forecasts to decode, see TAF. For U.S. format forecasts use TAF (FAA).
Endpoints
POST /opmet-decoder-taf-icao/decode
Content-Type: application/json
{ "raw": "<TAF text>" }
Parameters
| Parameter | In | Description |
|---|---|---|
raw |
body | Forecast text, at least 10 characters. Line breaks, extra spaces, lower case and a final = are accepted. |
How the template is processed
- Field names and wording come from the template and the related PANS-MET paragraphs: output keys are the template element names; group headers use the meanings of Table A4-2 and the notes on the change indicators. Abbreviations are expanded as defined in PANS-MET and PANS-ABC (Doc 8400).
- Header elements (type, location indicator, time of issue, period of validity) are at the top level.
- Forecast groups: the base forecast and every change group (
BECMG,TEMPO,FM,PROB30,PROB40,PROB30 TEMPO,PROB40 TEMPO) become one box each inforecast_groups, with a header (label) and the elements of that group. - M (mandatory) elements of the base forecast are always present (
nullor[]when missing). Change groups contain only the elements they give. - Special cases:
NIL(missing forecast) andCNL(cancelled forecast) are returned as their own fields with no forecast groups;CAVOKreplaces visibility and cloud in its group;NSCis "No significant clouds"; wind00000isCalm; visibility9999is10 km or more; temperature groups (TX…,TN…) appear in the base forecast as aTemperaturelist. - Strict template: a value that does not follow the template is not guessed; it is listed under
Undecodable elements(neighbouring groups form one entry).
For the full list of elements and their templates, see PANS-MET Table A4-1.
Response
Example — PANS-MET Example A4-1:
TAF YUDO 151800Z 1600/1618 13005MPS 9000 BKN020 BECMG 1606/1608 SCT015CB BKN020 TEMPO 1608/1612 17006G12MPS 1000 TSRA SCT010CB BKN020 FM161230 15004MPS 9999 BKN020
{
"Type of forecast": "TAF",
"Location indicator": "YUDO",
"Time of issue of forecast": "Day 15, 18:00 UTC",
"Days and period of validity of forecast": "Day 16, 00:00 UTC to Day 16, 18:00 UTC",
"forecast_groups": [
{"label": "Base forecast (Day 16, 00:00 UTC to Day 16, 18:00 UTC)", "label_start": 17, "label_end": 26,
"Surface wind": "05 m/s from 130°T", "Visibility": "9000 m", "Cloud": ["Broken [5/8, 7/8] at 2000 ft AGL"]},
{"label": "Becoming - Day 16, 06:00 UTC to Day 16, 08:00 UTC - (The change is forecast to commence at Day 16, 06:00 UTC and be completed by Day 16, 08:00 UTC) (Note: …)", "label_start": 48, "label_end": 63,
"Cloud": ["Scattered [3/8, 4/8] at 1500 ft AGL cumulonimbus", "Broken [5/8, 7/8] at 2000 ft AGL"]},
{"label": "Temporary - Day 16, 08:00 UTC to Day 16, 12:00 UTC - (…) (Note: …)", "label_start": 80, "label_end": 95,
"Surface wind": "06 m/s gusting 12 m/s from 170°T", "Visibility": "1000 m", "Weather": ["Thunderstorm with rain"],
"Cloud": ["Scattered [3/8, 4/8] at 1000 ft AGL cumulonimbus", "Broken [5/8, 7/8] at 2000 ft AGL"]},
{"label": "From - Day 16, 12:30 UTC - (Significant change in most weather elements occurring at Day 16, 12:30 UTC)", "label_start": 134, "label_end": 142,
"Surface wind": "04 m/s from 150°T", "Visibility": "10 km or more", "Cloud": ["Broken [5/8, 7/8] at 2000 ft AGL"]}
],
"marker_positions": [{"start": 48, "end": 63}, {"start": 80, "end": 95}, {"start": 134, "end": 142}],
"positions": [{"start": 0, "end": 3}, "…"],
"raw": "TAF YUDO 151800Z …"
}
| Key | Description |
|---|---|
| header keys | Type of forecast, location indicator, time of issue, period of validity |
forecast_groups |
One box per forecast group: label, label_start/label_end (header span in the message) and the group's elements |
marker_positions |
Header spans of the change groups |
Undecodable elements |
Groups that do not follow the template (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 (header fields, then the groups in order) |
raw |
The message as received |
Errors
| Code | Meaning |
|---|---|
400 |
The message could not be parsed at all; detail explains why |
422 |
raw is missing or shorter than 10 characters |