# Aviation Weather Center

> Read official US aviation weather from the National Weather Service's Aviation Weather Center, through its keyless public Data API: METARs and TAFs, pilot reports, SIGMETs and AIRMETs, center advisories, the convective forecast, winds and temperatures aloft, area forecasts and forecast discussions, plus airport, station, navaid, fix, and obstacle lookups. No account or API key required.

App · Weather & Space · 20 actions. Web page: https://docs.lodol.com/docs/integrations/aviation-weather-center

## Actions

### Get airport info

Look up airports: name, position, elevation, magnetic variation, ownership, and the runways with their dimensions and surface. Airport IDs or a bounding box are required.

**Inputs**

- Airports (`ids`, text): Airport IDs to look up, separated by commas. Leave blank if you are using a bounding box.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as one row per airport in 'entries'. GeoJSON returns those rows as features with geometry; decoded is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `decoded` (Decoded text (human-readable)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "country": "US",
      "elev": "313",
      "faaId": "MCI",
      "iataId": "MCI",
      "icaoId": "KMCI",
      "lat": "39.2976",
      "lon": "-94.7139",
      "magdec": "02E",
      "name": "KANSAS CITY/KANSAS CITY INTL",
      "owner": "P",
      "runways": [
        {
          "dimension": "10801x150",
          "id": "01L/19R",
          "surface": "CONC"
        }
      ],
      "source": "FAA",
      "state": "MO",
      "type": "ARP"
    }
  ],
  "format": "json"
}
```

### Get Alaska AIRMETs

Read the domestic AIRMETs issued for Alaska, decoded with their hazard, altitude band, and area. The contiguous United States is covered by 'Get graphical AIRMETs' instead. AIRMETs only exist while conditions warrant one, and this is a single region's product, so no advisories in force is a common and correct answer: expect a count of 0 much of the time.

**Inputs**

- Format (`format`, text): Output format. Defaults to GeoJSON, which comes back as one row per advisory in 'entries', each with the area it covers. This endpoint's plain JSON output is the one format on this API that answers an empty result with nothing at all rather than an empty list, so GeoJSON is the dependable structured choice here. IWXXM is returned verbatim in 'content'. One of: `geojson` (GeoJSON (rows with geometry)), `json` (JSON (decoded rows)), `iwxxm` (IWXXM (ICAO XML)). Default: `geojson`.
- Hazard (`hazard`, text): Only return advisories for this hazard. One of: `turb` (Turbulence), `ifr` (IFR conditions), `conv` (Convection (thunderstorms)), `ice` (Icing).
- Flight level (`level`, number): Only return advisories that touch this level, as a flight level in hundreds of feet (300 means 30,000 ft). The API searches a window of plus or minus 3,000 ft around it. From 0 to 900.
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "geometry": {
        "coordinates": [
          [
            [
              -95.1,
              39.2
            ],
            [
              -93.4,
              40.1
            ],
            [
              -92.8,
              38.6
            ],
            [
              -95.1,
              39.2
            ]
          ]
        ],
        "type": "Polygon"
      },
      "properties": {
        "base": 24000,
        "hazard": "TURB",
        "severity": "MOD",
        "top": 38000,
        "validTimeFrom": 1699056000,
        "validTimeTo": 1699070400
      },
      "type": "Feature"
    }
  ],
  "format": "geojson"
}
```

### Get area forecast

Read the textual Area Forecast (FA) for one Alaskan region: the synopsis, clouds, and weather covering a whole area rather than a single airport. Returned as the bulletin text in 'content'.

**Inputs**

- Region (`region`, text, required): Which Alaskan region's area forecast to read. One of: `aknorth` (Northern half of Alaska), `akcentral` (Interior Alaska), `akaleutian` (Aleutians), `aksouth` (Southcentral Alaska), `aksouthwest` (Alaska Peninsula), `aksoutheast` (Eastern Gulf of Alaska), `akpanhandle` (Alaska Panhandle). Default: `aknorth`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "FAAK47 PAFC 041045\nFA9N\nSYNOPSIS AND VFR CLDS/WX\nSYNOPSIS VALID UNTIL 050500\n...LOW PRES OVER THE NORTH SLOPE DRIFTS EAST...",
  "count": 0,
  "entries": [],
  "format": "text"
}
```

### Get center weather advisories

Read the Center Weather Advisories (CWAs) issued by the NWS Center Weather Service Units: the short-fuse, en-route advisories for conditions affecting one air route traffic control center.

**Inputs**

- Hazard (`hazard`, text): Only return advisories for this hazard. One of: `ts` (Thunderstorms), `turb` (Turbulence), `ice` (Icing), `ifr` (IFR conditions), `pcpn` (Precipitation), `unk` (Unknown or other).
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "cwaText": "ZKC1 CWA 041735 VALID UNTIL 041935 AREA OF EMBEDDED TS MOV FROM 24020KT TOPS TO FL410",
      "cwsu": "ZKC",
      "hazard": "TS",
      "issueTime": "2023-11-04 17:35:00.000Z",
      "series": 1,
      "validTimeFrom": 1699119300,
      "validTimeTo": 1699126500
    }
  ],
  "format": "json"
}
```

### Get convective forecast

Read the Traffic Flow Management Convective Forecast (TCF): the polygons of expected thunderstorm activity, with coverage, tops, and confidence, that air traffic flow decisions are planned around.

**Inputs**

- Format (`format`, text): Output format. Defaults to GeoJSON, which comes back as one forecast polygon per row in 'entries'. Raw is returned verbatim in 'content'. One of: `geojson` (GeoJSON (rows with geometry)), `raw` (Raw text (as issued)). Default: `geojson`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "geometry": {
        "coordinates": [
          [
            [
              -97.2,
              35.1
            ],
            [
              -95.6,
              36.4
            ],
            [
              -94.9,
              34.8
            ],
            [
              -97.2,
              35.1
            ]
          ]
        ],
        "type": "Polygon"
      },
      "properties": {
        "conf": "HIGH",
        "coverage": "SCT",
        "tops": 420,
        "valid": "2023-11-04T18:00:00Z"
      },
      "type": "Feature"
    }
  ],
  "format": "geojson"
}
```

### Get domestic SIGMETs

Read the SIGMETs in force over the contiguous United States in domestic format: convective SIGMETs and the non-convective ones for turbulence, icing, and IFR conditions. For SIGMETs the US issues in international format, use 'Get international SIGMETs' instead.

**Inputs**

- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw, XML, and IWXXM are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (the bulletin as issued)), `geojson` (GeoJSON (rows with geometry)), `xml`, `iwxxm` (IWXXM (ICAO XML)). Default: `json`.
- Hazard (`hazard`, text): Only return advisories for this hazard. One of: `conv` (Convection (thunderstorms)), `turb` (Turbulence), `ice` (Icing), `ifr` (IFR conditions).
- Flight level (`level`, number): Only return advisories that touch this level, as a flight level in hundreds of feet (300 means 30,000 ft). The API searches a window of plus or minus 3,000 ft around it. From 0 to 900.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "geometry": {
        "coordinates": [
          [
            [
              -95.1,
              39.2
            ],
            [
              -93.4,
              40.1
            ],
            [
              -92.8,
              38.6
            ],
            [
              -95.1,
              39.2
            ]
          ]
        ],
        "type": "Polygon"
      },
      "properties": {
        "base": 24000,
        "hazard": "TURB",
        "severity": "MOD",
        "top": 38000,
        "validTimeFrom": 1699056000,
        "validTimeTo": 1699070400
      },
      "type": "Feature"
    }
  ],
  "format": "geojson"
}
```

### Get forecast discussion

Read a Weather Forecast Office's forecast discussion: the forecaster's own reasoning behind the products. Returns the aviation section, or the full discussion, issued in the past six hours, as text in 'content'.

**Inputs**

- Forecast office (`cwa`, text): Which Weather Forecast Office's discussion to read, by the four-letter identifier of the office itself: KEAX for Kansas City, KLOT for Chicago, KSEW for Seattle. That is the office's three-letter County Warning Area code with its K prefix (EAX becomes KEAX), and the bare three-letter code is not accepted. Leave blank for every office.
- Section (`type`, text): Whether to return only the aviation section or the full discussion. One of: `afd` (Aviation section), `af` (Full discussion). Default: `afd`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "AVIATION...(06Z TAFS)\nVFR conditions prevail through the period. Southwest winds 10-15 kt with gusts to 25 kt develop after 18Z.",
  "count": 0,
  "entries": [],
  "format": "text"
}
```

### Get geographic features

Look up the additional geographic features the Aviation Weather Center charts inside a bounding box, such as the named points and boundaries advisories are described against.

**Inputs**

- Bounding box (`bbox`, text, required): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative. Required for this action, which only ever searches an area.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "id": "CHI",
      "lat": 41.88,
      "lon": -87.63,
      "name": "Chicago"
    }
  ],
  "format": "json"
}
```

### Get graphical AIRMETs

Read Graphical AIRMETs (G-AIRMETs) for the contiguous United States: the three-hourly snapshots of turbulence, icing, freezing level, IFR conditions, mountain obscuration, low-level wind shear, and strong surface winds. For Alaska, use 'Get Alaska AIRMETs' instead.

**Inputs**

- Product (`product`, text): Which AIRMET product to read: Sierra (IFR and mountain obscuration), Tango (turbulence and winds), or Zulu (icing and freezing level). One of: `sierra` (Sierra (IFR and mountain obscuration)), `tango` (Tango (turbulence and surface winds)), `zulu` (Zulu (icing and freezing level)).
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw and XML are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)), `xml`. Default: `json`.
- Hazard (`hazard`, text): Only return advisories for this hazard. One of: `turb-hi` (Turbulence, high level), `turb-lo` (Turbulence, low level), `llws` (Low-level wind shear), `sfc_wind` (Strong surface winds), `ifr` (IFR conditions), `mtn_obs` (Mountain obscuration), `ice` (Icing), `fzlvl` (Freezing level).
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.
- Forecast hour (`fore`, text): Which snapshot of the current forecast package to read, in hours ahead of its issue time. One of: `0` (0 hours (valid now)), `3` (3 hours), `6` (6 hours), `9` (9 hours), `12` (12 hours).

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "geometry": {
        "coordinates": [
          [
            [
              -95.1,
              39.2
            ],
            [
              -93.4,
              40.1
            ],
            [
              -92.8,
              38.6
            ],
            [
              -95.1,
              39.2
            ]
          ]
        ],
        "type": "Polygon"
      },
      "properties": {
        "base": 24000,
        "hazard": "TURB",
        "severity": "MOD",
        "top": 38000,
        "validTimeFrom": 1699056000,
        "validTimeTo": 1699070400
      },
      "type": "Feature"
    }
  ],
  "format": "geojson"
}
```

### Get international SIGMETs

Read SIGMETs issued worldwide in the international format, decoded with their hazard, altitude band, valid period, and area. Does not include the convective and non-convective SIGMETs the United States issues in its own domestic format.

**Inputs**

- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw, XML, and IWXXM are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (the bulletin as issued)), `geojson` (GeoJSON (rows with geometry)), `xml`, `iwxxm` (IWXXM (ICAO XML)). Default: `json`.
- Hazard (`hazard`, text): Only return advisories for this hazard. One of: `turb` (Turbulence), `ice` (Icing).
- Flight level (`level`, number): Only return advisories that touch this level, as a flight level in hundreds of feet (300 means 30,000 ft). The API searches a window of plus or minus 3,000 ft around it. From 0 to 900.
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "geometry": {
        "coordinates": [
          [
            [
              -95.1,
              39.2
            ],
            [
              -93.4,
              40.1
            ],
            [
              -92.8,
              38.6
            ],
            [
              -95.1,
              39.2
            ]
          ]
        ],
        "type": "Polygon"
      },
      "properties": {
        "base": 24000,
        "hazard": "TURB",
        "severity": "MOD",
        "top": 38000,
        "validTimeFrom": 1699056000,
        "validTimeTo": 1699070400
      },
      "type": "Feature"
    }
  ],
  "format": "geojson"
}
```

### Get METARs

Read surface observations (METARs) for one or more airports, or for everything inside a bounding box: wind, visibility, cloud layers, temperature, altimeter setting, the raw observation, and the derived flight category (VFR, MVFR, IFR, LIFR). Station IDs or a bounding box are required.

**Inputs**

- Stations (`ids`, text): Station IDs, separated by commas. Two group shorthands also work here: @IL for every station in a US state, and ~US for every station in a country. Write the @ form in quotes and on its own, as "@IL", because a bare @ starts a variable reference in the builder and would be read as a variable named IL; the ~ form needs no quotes. A country is a lot of weather: ~US answers with every US station, which is around 170 KB of observations or 1.4 MB of forecasts, so prefer a state or a bounding box unless you really want all of it. Leave blank if you are using a bounding box.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as one decoded row per observation in 'entries'. GeoJSON returns those rows as features with geometry; raw, decoded, XML, and IWXXM are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (the bulletin as issued)), `decoded` (Decoded text (human-readable)), `geojson` (GeoJSON (rows with geometry)), `xml`, `iwxxm` (IWXXM (ICAO XML)). Default: `json`.
- Include TAF (`taf`, true/false): Also return each station's current Terminal Aerodrome Forecast alongside its observation. Defaults to off. Default: `false`.
- Hours back (`hours`, number): How many hours of observations to return, counting back from now. Defaults to 1.5, which is the most recent observation for most stations. From 0 to 1000. Default: `1.5`.
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "altim": 1016.3,
      "clouds": [
        {
          "base": 11000,
          "cover": "BKN"
        },
        {
          "base": 25000,
          "cover": "OVC"
        }
      ],
      "dewp": 2.8,
      "elev": 202,
      "fltCat": "VFR",
      "icaoId": "KORD",
      "lat": 41.9602,
      "lon": -87.9316,
      "metarType": "METAR",
      "name": "Chicago/O'Hare Intl",
      "obsTime": 1699048260,
      "rawOb": "KORD 032151Z 23006KT 10SM BKN110 OVC250 14/03 A3000 RMK AO2 SLP162 VIRGA OHD T01440028",
      "receiptTime": "2023-11-03 21:54:03.000Z",
      "reportTime": "2023-11-03 22:00:00.000Z",
      "slp": 1016.2,
      "temp": 14.4,
      "visib": 10.0,
      "wdir": 230,
      "wgst": 12,
      "wspd": 6,
      "wxString": "-RA"
    }
  ],
  "format": "json"
}
```

### Get meteorological information statements

Read the Meteorological Information Statements (MIS) issued by a Center Weather Service Unit: the longer-range outlook of conditions expected to affect an air route traffic control center, issued ahead of any advisory. A CWSU issues one only when it has something to flag, so a count of 0 is a common and correct answer rather than a failure.

**Inputs**

- Center (`loc`, text): Which CWSU's statements to read, by its center identifier such as ZKC or ZNY. Leave blank for every center.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as one row per statement in 'entries'. Text is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `text` (Plain text). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "cwsu": "ZKC",
      "issueTime": "2023-11-04 11:02:00.000Z",
      "misText": "ZKC MIS 01 VALID 041102-041900. AREA OF MVFR CIGS EXPECTED TO DEVELOP ACROSS THE WESTERN HALF OF ZKC.",
      "validTimeFrom": 1699095720,
      "validTimeTo": 1699124400
    }
  ],
  "format": "json"
}
```

### Get navigational aids

Look up navigational aids (VORs, VORTACs, NDBs and the like) with their type, frequency, position, elevation, and magnetic variation. Navaid IDs or a bounding box are required. Be aware that the Aviation Weather Center is publishing no navaid data at present: this endpoint answers every query, by identifier or by area, with an empty list, which is a gap in their data rather than anything to fix in the step. 'Get navigational fixes' covers waypoints and does return results.

**Inputs**

- Navaids (`ids`, text): Navaid identifiers to look up, separated by commas, such as MCI or OJC. Leave blank if you are using a bounding box. Note that the source dataset behind this action is currently empty, so no identifier returns anything today.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "country": "US",
      "elev": 310,
      "freq": 113.25,
      "id": "MCI",
      "lat": 39.2853,
      "lon": -94.7371,
      "mag_dec": "05E",
      "name": "Kansas City",
      "state": "MO",
      "type": "VORTAC"
    }
  ],
  "format": "json"
}
```

### Get navigational fixes

Look up navigational fixes and waypoints by their five-letter names, or find every fix inside a bounding box. Fix IDs or a bounding box are required.

**Inputs**

- Fixes (`ids`, text): Five-letter fix names to look up, separated by commas. Leave blank if you are using a bounding box.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "id": "BARBQ",
      "lat": 39.0811,
      "lon": -94.7681,
      "type": "I"
    }
  ],
  "format": "json"
}
```

### Get obstacles

Look up the charted obstacles inside a bounding box (towers, stacks, and other tall structures) with their position and height.

**Inputs**

- Bounding box (`bbox`, text, required): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative. Required for this action, which only ever searches an area.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw is returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)). Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "agl": 449,
      "elev": 1105,
      "lat": 41.7402,
      "lon": -87.9711,
      "type": "TOWER"
    }
  ],
  "format": "json"
}
```

### Get pilot reports

Read pilot reports (PIREPs and AIREPs), which record what crews actually encountered: turbulence, icing, cloud layers, visibility, and ride quality, with the aircraft type and flight level. Search a bounding box, or a radius around one airport.

**Inputs**

- Around station (`id`, text): Station to search around. Use together with 'Radius'. Leave blank if you are using a bounding box.
- Radius (`distance`, number): How far around that station to search, in statute miles. From 0 to 5000.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as one decoded row per report in 'entries'. GeoJSON returns those rows as features with geometry; raw, decoded, and XML are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (the report as filed)), `decoded` (Decoded text (human-readable)), `geojson` (GeoJSON (rows with geometry)), `xml`. Default: `json`.
- Hours back (`age`, number): How many hours of reports to return, counting back from now. Reports thin out quickly, so a few hours is usually the useful window. From 0 to 1000.
- Flight level (`level`, number): Only return advisories that touch this level, as a flight level in hundreds of feet (300 means 30,000 ft). The API searches a window of plus or minus 3,000 ft around it. From 0 to 900.
- Minimum intensity (`inten`, text): Only return reports at or above this intensity of turbulence or icing. One of: `lgt` (Light), `mod` (Moderate), `sev` (Severe).
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "acType": "E170",
      "fltLvl": "140",
      "icaoId": "KCOU",
      "lat": 40.938,
      "lon": -90.4311,
      "obsTime": 1699379880,
      "pirepType": "PIREP",
      "rawOb": "COU UA /OV COU260020/TM 0012/FL140/TP E170/TB LGT-MOD CHOP 140-170/RM DURC /ZKC FDC/CW",
      "receiptTime": "2023-11-07 18:08:15.000Z",
      "tbInt1": "LGT-MOD",
      "tbType1": "CAT"
    }
  ],
  "format": "json"
}
```

### Get station info

Look up the weather stations behind the reports: position, elevation, state and country, the ICAO, IATA, and FAA identifiers, and which products the site issues. Station IDs or a bounding box are required.

**Inputs**

- Stations (`ids`, text): Station IDs, separated by commas. To cover a region rather than a list of airports, leave this blank and give a bounding box instead: this endpoint matches identifiers one station at a time, with no shorthand for a whole state.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw and XML are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (as issued)), `geojson` (GeoJSON (rows with geometry)), `xml`. Default: `json`.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "country": "US",
      "elev": 202,
      "faaId": "ORD",
      "iataId": "ORD",
      "icaoId": "KORD",
      "lat": 41.9602,
      "lon": -87.9316,
      "priority": 1,
      "site": "Chicago/O'Hare Intl",
      "siteType": [
        "METAR",
        "TAF"
      ],
      "state": "IL"
    }
  ],
  "format": "json"
}
```

### Get TAFs

Read Terminal Aerodrome Forecasts for one or more airports, or for everything inside a bounding box. Each forecast comes back with its valid period, the raw bulletin, and a decoded list of forecast periods with wind, visibility, weather, and clouds. Station IDs or a bounding box are required.

**Inputs**

- Stations (`ids`, text): Station IDs, separated by commas. Two group shorthands also work here: @IL for every station in a US state, and ~US for every station in a country. Write the @ form in quotes and on its own, as "@IL", because a bare @ starts a variable reference in the builder and would be read as a variable named IL; the ~ form needs no quotes. A country is a lot of weather: ~US answers with every US station, which is around 170 KB of observations or 1.4 MB of forecasts, so prefer a state or a bounding box unless you really want all of it. Leave blank if you are using a bounding box.
- Bounding box (`bbox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Format (`format`, text): Output format. Defaults to JSON, which comes back as decoded rows in 'entries'. GeoJSON returns those rows as features with geometry; raw, XML, and IWXXM are returned verbatim in 'content'. One of: `json` (JSON (decoded rows)), `raw` (Raw text (the bulletin as issued)), `geojson` (GeoJSON (rows with geometry)), `xml`, `iwxxm` (IWXXM (ICAO XML)). Default: `json`.
- Include METAR (`metar`, true/false): Also return each station's current observation alongside its forecast. Defaults to off. Default: `false`.
- Select by (`time`, text): Whether to select forecasts by the period they are valid for (the default) or by when they were issued. One of: `valid` (Valid time), `issue` (Issuance time). Default: `valid`.
- As of (`date`, date and time): Point in time to read the products as of, either as the API's own yyyymmdd_hhmm or as an ISO 8601 timestamp. Leave blank for the latest products.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "",
  "count": 1,
  "entries": [
    {
      "bulletinTime": "2023-11-03 23:20:00.000Z",
      "elev": 202,
      "fcsts": [
        {
          "clouds": [
            {
              "base": 11000,
              "cover": "OVC"
            }
          ],
          "timeFrom": 1699056000,
          "timeTo": 1699077600,
          "visib": 6.0,
          "wdir": "VRB",
          "wspd": 5,
          "wxString": "-SHRA"
        }
      ],
      "icaoId": "KORD",
      "issueTime": "2023-11-03 23:20:00.000Z",
      "lat": 41.9602,
      "lon": -87.9316,
      "mostRecent": 1,
      "name": "Chicago/O'Hare Intl",
      "rawTAF": "KORD 032320Z 0400/0506 VRB05KT P6SM FEW050 SCT080 OVC110 TEMPO 0401/0403 -SHRA BKN050 OVC080 FM040600 34006KT P6SM FEW015 SCT100 BKN150",
      "remarks": "RMK PGG",
      "validTimeFrom": 1699056000,
      "validTimeTo": 1699164000
    }
  ],
  "format": "json"
}
```

### Get winds and temperatures aloft

Read the FD winds-and-temperatures-aloft bulletin for a region: forecast wind direction, speed, and temperature at each reporting altitude, for every station in that region. Returned as the bulletin text in 'content'.

**Inputs**

- Region (`region`, text): Which region's bulletin to read. One of: `us` (All contiguous US sites), `bos` (Northeast (Boston)), `mia` (Southeast (Miami)), `chi` (North central (Chicago)), `dfw` (South central (Dallas-Fort Worth)), `slc` (Rocky Mountain (Salt Lake City)), `sfo` (Pacific Coast (San Francisco)), `alaska`, `hawaii`, `other_pac` (Western Pacific).
- Altitude band (`level`, text): Low altitudes (up to 24,000 ft) or high altitudes (above them). One of: `low`, `high`.
- Forecast cycle (`fcst`, text): Which forecast cycle to read: the 6, 12, or 24 hour product. One of: `06` (6 hour), `12` (12 hour), `24` (24 hour).

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "DATA BASED ON 041200Z\nVALID 041800Z   FOR USE 1400-2100Z. TEMPS NEG ABV 24000\nFT  3000    6000    9000   12000   18000   24000\nBOS 2116 2222+06 2334+01 2447-05 2578-17 2695-29",
  "count": 0,
  "entries": [],
  "format": "text"
}
```

### Query the legacy data server

Run a query against the compatibility layer for the retired Text Data Server. Its one advantage over the other actions is an explicit start and end time, so it can pull a past window of METARs, TAFs, pilot reports, SIGMETs, or G-AIRMETs rather than only recent ones. Give a start and end time for that; with neither, it reads the last two hours. Answers in XML or CSV, returned in 'content'.

**Inputs**

- Data source (`dataSource`, text, required): Which product to query. One of: `metars`, `tafs`, `aircraftreports` (Pilot reports), `airsigmets` (AIRMETs and SIGMETs), `gairmets` (Graphical AIRMETs). Default: `metars`.
- Stations (`stationString`, text): Station IDs to query, separated by commas. Give this, a bounding box, or a radial distance.
- Bounding box (`boundingBox`, text): Bounding box to search, as lat0, lon0, lat1, lon1: the south-west corner followed by the north-east corner. Longitudes in the Americas are negative.
- Start time (`startTime`, date and time): Beginning of the window to query, as yyyymmdd_hhmm or an ISO 8601 timestamp. Give this together with an end time to pull a specific past window; leave both blank to use 'Hours back' instead.
- End time (`endTime`, date and time): End of the window to query, as yyyymmdd_hhmm or an ISO 8601 timestamp.
- Hours back (`hoursBeforeNow`, number): Query the last this many hours. Defaults to 2. A start and end time take precedence over this if you give them, so leave those blank to use it. From 0 to 1000. Default: `2`.
- Format (`format`, text): Output format. Defaults to XML; TAFs are not available as CSV. Either way the document is returned in 'content'. One of: `xml`, `csv`. Default: `xml`.
- Most recent per station (`mostRecentForEachStation`, text): Return only the latest report for each station, for METARs and TAFs. 'Constraint' asks the server for the newest report directly; 'post-filter' fetches the window and then thins it, which is slower but honours the other filters. One of: `constraint` (Constraint (faster)), `postfilter` (Post-filter).
- Radial distance (`radialDistance`, text): Circular bounds for pilot reports, in the legacy server's own spelling: distance in statute miles, a semicolon, then longitude and latitude.

**Outputs**

- `content` (text): The response verbatim for the raw, decoded, XML, IWXXM, CSV, and plain-text formats. Empty for JSON and GeoJSON.
- `count` (number): Number of rows in 'entries'; 0 when a text format was asked for
- `entries` (list): One row per product for the JSON and GeoJSON formats (GeoJSON rows are features, each with its own geometry). Empty for every other format.
- `format` (text): The format the products were requested in

**Example output**

```json
{
  "content": "No errors\nNo warnings\n2 ms\ndata source=metars\nraw_text,station_id,observation_time,latitude,longitude\n\"KORD 032151Z 23006KT 10SM BKN110 OVC250 14/03 A3000\",KORD,2023-11-03T21:51:00Z,41.96,-87.93",
  "count": 0,
  "entries": [],
  "format": "csv"
}
```
