---
title: "FAA delay status, ground stops, and disruptions"
---

> Documentation Index
> Fetch the complete documentation index at: https://flightqueue.com/developers/reference/llms.txt
> Use this file to discover all available pages before exploring further.

# FAA delay status, ground stops, and disruptions

Path: FlightQueue API › Airports

`GET /airports/{iata}/delays`

Returns FAA ground stops, ground delay programs, arrival and departure delays, and weather impact. Returns status normal and an empty delays array when the FAA feed has no entry for the airport.

Access: Free with agent or developer key.

## Authentication

Requires one of the following:

- `BearerAuth`, http, header `Authorization`
- `ApiKeyAuth`, apiKey, in header, header `X-API-Key`

## Path parameters

- `iata` (`getDelays.path.iata`; string, required) — Three-letter IATA airport code.
  - pattern `^[A-Za-z]{3}$`

## Code samples

### cURL

```bash
curl --request GET \
  --url 'https://flightqueue.com/api/v1/airports/<iata>/delays' \
  --header 'Authorization: Bearer <token>'
```

### TypeScript

```typescript
const url = 'https://flightqueue.com/api/v1/airports/<iata>/delays';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://flightqueue.com/api/v1/airports/<iata>/delays"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

Success

#### Example

```json
{
  "success": true,
  "data": {
    "airportCode": "JFK",
    "status": "delayed",
    "delays": {
      "hasActiveDelays": true,
      "severity": "medium",
      "groundStop": false,
      "groundDelayProgram": null,
      "arrivalDelays": {
        "min": 10,
        "max": 45,
        "trend": "increasing"
      },
      "departureDelays": null,
      "closures": [],
      "weatherImpact": "none"
    },
    "weather": "none",
    "updatedAt": "2026-11-07T12:00:00.000Z"
  },
  "meta": {
    "requestId": "3f8c2b1e-6d4a-4f7b-9a1e-2c5d8e7f0a12",
    "timestamp": "2026-11-07T12:00:00.000Z"
  }
}
```

- `success` (`getDelays.response.200.success`; boolean, required)
- `data` (`getDelays.response.200.data`; any of, required)
  - any of:
    - `object`
      - `airportCode` (`getDelays.response.200.data.1.airportCode`; string, required) — Three-letter IATA airport code, upper case.
        - pattern `^[A-Z]{3}$`
      - `status` (`getDelays.response.200.data.1.status`; string, required)
      - `delays` (`getDelays.response.200.data.1.delays`; array<unknown>, required) — Always an empty array when no FAA feed exists for the airport.
      - `updatedAt` (`getDelays.response.200.data.1.updatedAt`; string, required) — ISO 8601 timestamp in UTC.
        - format `date-time`; pattern `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
    - `object`
      - `airportCode` (`getDelays.response.200.data.2.airportCode`; string, required) — Three-letter IATA airport code, upper case.
        - pattern `^[A-Z]{3}$`
      - `status` (`getDelays.response.200.data.2.status`; string, required)
        - one of `"normal"`, `"delayed"`
      - `delays` (`getDelays.response.200.data.2.delays`; any of, required) — Delay details when delays are active, otherwise null.
        - any of:
          - `object`
            - `hasActiveDelays` (`getDelays.response.200.data.2.delays.1.hasActiveDelays`; boolean, required)
            - `severity` (`getDelays.response.200.data.2.delays.1.severity`; string, required)
              - one of `"critical"`, `"high"`, `"medium"`, `"low"`
            - `groundStop` (`getDelays.response.200.data.2.delays.1.groundStop`; boolean, required)
            - `groundDelayProgram` (`getDelays.response.200.data.2.delays.1.groundDelayProgram`; any of, required)
              - any of:
                - `object`
                  - `active` (`getDelays.response.200.data.2.delays.1.groundDelayProgram.1.active`; boolean, required)
                  - `averageDelay` (`getDelays.response.200.data.2.delays.1.groundDelayProgram.1.averageDelay`; number, required)
                  - `reason` (`getDelays.response.200.data.2.delays.1.groundDelayProgram.1.reason`; string, required)
                  - `endTime` (`getDelays.response.200.data.2.delays.1.groundDelayProgram.1.endTime`; string, optional)
                - `null`
            - `arrivalDelays` (`getDelays.response.200.data.2.delays.1.arrivalDelays`; any of, required)
              - any of:
                - `object`
                  - `min` (`getDelays.response.200.data.2.delays.1.arrivalDelays.1.min`; number, required)
                  - `max` (`getDelays.response.200.data.2.delays.1.arrivalDelays.1.max`; number, required)
                  - `trend` (`getDelays.response.200.data.2.delays.1.arrivalDelays.1.trend`; string, required)
                    - one of `"increasing"`, `"decreasing"`, `"stable"`
                - `null`
            - `departureDelays` (`getDelays.response.200.data.2.delays.1.departureDelays`; any of, required)
              - any of:
                - `object`
                  - `min` (`getDelays.response.200.data.2.delays.1.departureDelays.1.min`; number, required)
                  - `max` (`getDelays.response.200.data.2.delays.1.departureDelays.1.max`; number, required)
                  - `trend` (`getDelays.response.200.data.2.delays.1.departureDelays.1.trend`; string, required)
                    - one of `"increasing"`, `"decreasing"`, `"stable"`
                - `null`
            - `closures` (`getDelays.response.200.data.2.delays.1.closures`; array<string>, required)
            - `weatherImpact` (`getDelays.response.200.data.2.delays.1.weatherImpact`; string, required)
              - one of `"none"`, `"low"`, `"moderate"`, `"high"`
            - `reason` (`getDelays.response.200.data.2.delays.1.reason`; string, optional)
          - `null`
      - `weather` (`getDelays.response.200.data.2.weather`; any of, required)
        - any of:
          - `string`: one of `"none"`, `"low"`, `"moderate"`, `"high"`
          - `null`
      - `updatedAt` (`getDelays.response.200.data.2.updatedAt`; string, required) — ISO 8601 timestamp in UTC.
        - format `date-time`; pattern `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
- `meta` (`getDelays.response.200.meta`; object, required)
  - `requestId` (`getDelays.response.200.meta.requestId`; string, required) — Unique ID for this request. Quote it when you contact support.
    - format `uuid`; pattern `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`
  - `timestamp` (`getDelays.response.200.meta.timestamp`; string, required) — ISO 8601 timestamp in UTC.
    - format `date-time`; pattern `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`

### 401

Unauthorized

#### Example

```json
{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "No API key was sent in X-API-Key or Authorization."
  }
}
```

- `success` (`getDelays.response.401.success`; boolean, required)
- `error` (`getDelays.response.401.error`; object, required)
  - `code` (`getDelays.response.401.error.code`; string, required) — Machine-readable error code.
    - one of `"MISSING_API_KEY"`, `"INVALID_API_KEY"`, `"RATE_LIMIT_EXCEEDED"`, `"PREMIUM_REQUIRED"`, `"ENTERPRISE_REQUIRED"`, `"INVALID_AIRPORT"`, `"INVALID_DATE"`, `"INVALID_BODY"`, `"TOO_MANY_AIRPORTS"`, `"NOT_FOUND"`, `"INTERNAL_ERROR"`
  - `message` (`getDelays.response.401.error.message`; string, required) — Human-readable explanation.

### 429

Too many requests

#### Example

```json
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "The key sent more requests per minute than its tier allows."
  }
}
```

- `success` (`getDelays.response.429.success`; boolean, required)
- `error` (`getDelays.response.429.error`; object, required)
  - `code` (`getDelays.response.429.error.code`; string, required) — Machine-readable error code.
    - one of `"MISSING_API_KEY"`, `"INVALID_API_KEY"`, `"RATE_LIMIT_EXCEEDED"`, `"PREMIUM_REQUIRED"`, `"ENTERPRISE_REQUIRED"`, `"INVALID_AIRPORT"`, `"INVALID_DATE"`, `"INVALID_BODY"`, `"TOO_MANY_AIRPORTS"`, `"NOT_FOUND"`, `"INTERNAL_ERROR"`
  - `message` (`getDelays.response.429.error.message`; string, required) — Human-readable explanation.


Source: https://flightqueue.com/developers/reference/api/airports/delays/index.md
