---
title: "Current security, check-in, and immigration wait estimates"
---

> 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.

# Current security, check-in, and immigration wait estimates

Path: FlightQueue API › Airports

`GET /airports/{iata}/wait-times`

Current security, check-in, and immigration wait estimates for one airport.

Access: Premium (paid plan or Pro/Enterprise API key).

Alias: GET /api/v1/airports/{iata} returns the same response.

## Authentication

Requires one of the following:

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

## Path parameters

- `iata` (`getWaitTimes.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>/wait-times' \
  --header 'Authorization: Bearer <token>'
```

### TypeScript

```typescript
const url = 'https://flightqueue.com/api/v1/airports/<iata>/wait-times';
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>/wait-times"

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

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

print(response.text)
```

## Responses

### 200

Success

#### Example

```json
{
  "success": true,
  "data": {
    "airportCode": "JFK",
    "timestamp": "2026-11-07T12:00:00.000Z",
    "security": {
      "estimatedMinutes": 25,
      "range": {
        "min": 20,
        "max": 30
      },
      "dataSource": "Official live feed",
      "provenance": "live",
      "coverageTier": "official_live",
      "confidenceLevel": "high",
      "reportedAt": "2026-11-07T11:55:00.000Z"
    },
    "checkIn": {
      "estimatedMinutes": 15,
      "range": {
        "min": 10,
        "max": 20
      }
    },
    "immigration": {
      "estimatedMinutes": 18,
      "range": {
        "min": 12,
        "max": 24
      },
      "dataSource": "Enhanced prediction",
      "provenance": "model",
      "coverageTier": "enhanced",
      "confidenceLevel": "low",
      "reportedAt": "2026-11-07T11:50:00.000Z"
    },
    "confidence": 0.9
  },
  "meta": {
    "requestId": "3f8c2b1e-6d4a-4f7b-9a1e-2c5d8e7f0a12",
    "timestamp": "2026-11-07T12:00:00.000Z"
  }
}
```

- `success` (`getWaitTimes.response.200.success`; boolean, required)
- `data` (`getWaitTimes.response.200.data`; object, required)
  - `airportCode` (`getWaitTimes.response.200.data.airportCode`; string, required) — Three-letter IATA airport code, upper case.
    - pattern `^[A-Z]{3}$`
  - `timestamp` (`getWaitTimes.response.200.data.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))$`
  - `security` (`getWaitTimes.response.200.data.security`; object, required)
    - `estimatedMinutes` (`getWaitTimes.response.200.data.security.estimatedMinutes`; number, required)
    - `range` (`getWaitTimes.response.200.data.security.range`; object, required)
      - `min` (`getWaitTimes.response.200.data.security.range.min`; number, required) — Lowest estimated wait, in minutes.
      - `max` (`getWaitTimes.response.200.data.security.range.max`; number, required) — Highest estimated wait, in minutes.
    - `dataSource` (`getWaitTimes.response.200.data.security.dataSource`; string, required) — Human-readable source label, such as an official feed or model estimate.
    - `provenance` (`getWaitTimes.response.200.data.security.provenance`; string, required)
      - one of `"live"`, `"model"`, `"historical"`
    - `coverageTier` (`getWaitTimes.response.200.data.security.coverageTier`; string, required)
      - one of `"official_live"`, `"enhanced"`, `"estimate"`
    - `confidenceLevel` (`getWaitTimes.response.200.data.security.confidenceLevel`; string, required)
      - one of `"high"`, `"medium"`, `"low"`
    - `reportedAt` (`getWaitTimes.response.200.data.security.reportedAt`; string, optional) — When the underlying value was last updated.
  - `checkIn` (`getWaitTimes.response.200.data.checkIn`; object, required)
    - `estimatedMinutes` (`getWaitTimes.response.200.data.checkIn.estimatedMinutes`; number, required)
    - `range` (`getWaitTimes.response.200.data.checkIn.range`; object, required)
      - `min` (`getWaitTimes.response.200.data.checkIn.range.min`; number, required) — Lowest estimated wait, in minutes.
      - `max` (`getWaitTimes.response.200.data.checkIn.range.max`; number, required) — Highest estimated wait, in minutes.
  - `immigration` (`getWaitTimes.response.200.data.immigration`; object, required)
    - `estimatedMinutes` (`getWaitTimes.response.200.data.immigration.estimatedMinutes`; number, required)
    - `range` (`getWaitTimes.response.200.data.immigration.range`; object, required)
      - `min` (`getWaitTimes.response.200.data.immigration.range.min`; number, required) — Lowest estimated wait, in minutes.
      - `max` (`getWaitTimes.response.200.data.immigration.range.max`; number, required) — Highest estimated wait, in minutes.
    - `dataSource` (`getWaitTimes.response.200.data.immigration.dataSource`; string, required) — Human-readable source label, such as an official feed or model estimate.
    - `provenance` (`getWaitTimes.response.200.data.immigration.provenance`; string, required)
      - one of `"live"`, `"model"`, `"historical"`
    - `coverageTier` (`getWaitTimes.response.200.data.immigration.coverageTier`; string, required)
      - one of `"official_live"`, `"enhanced"`, `"estimate"`
    - `confidenceLevel` (`getWaitTimes.response.200.data.immigration.confidenceLevel`; string, required)
      - one of `"high"`, `"medium"`, `"low"`
    - `reportedAt` (`getWaitTimes.response.200.data.immigration.reportedAt`; string, optional) — When the underlying value was last updated.
  - `confidence` (`getWaitTimes.response.200.data.confidence`; number, required) — Overall model confidence, 0 to 1.
- `meta` (`getWaitTimes.response.200.meta`; object, required)
  - `requestId` (`getWaitTimes.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` (`getWaitTimes.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` (`getWaitTimes.response.401.success`; boolean, required)
- `error` (`getWaitTimes.response.401.error`; object, required)
  - `code` (`getWaitTimes.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` (`getWaitTimes.response.401.error.message`; string, required) — Human-readable explanation.

### 403

Forbidden

#### Example

```json
{
  "success": false,
  "error": {
    "code": "PREMIUM_REQUIRED",
    "message": "The key does not include the premium feature for this endpoint."
  }
}
```

- `success` (`getWaitTimes.response.403.success`; boolean, required)
- `error` (`getWaitTimes.response.403.error`; object, required)
  - `code` (`getWaitTimes.response.403.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` (`getWaitTimes.response.403.error.message`; string, required) — Human-readable explanation.

### 404

Not found

#### Example

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "The airport is not in the FlightQueue dataset."
  }
}
```

- `success` (`getWaitTimes.response.404.success`; boolean, required)
- `error` (`getWaitTimes.response.404.error`; object, required)
  - `code` (`getWaitTimes.response.404.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` (`getWaitTimes.response.404.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` (`getWaitTimes.response.429.success`; boolean, required)
- `error` (`getWaitTimes.response.429.error`; object, required)
  - `code` (`getWaitTimes.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` (`getWaitTimes.response.429.error.message`; string, required) — Human-readable explanation.


Source: https://flightqueue.com/developers/reference/api/airports/wait-times/index.md
