---
title: "Bulk wait times (Enterprise)"
---

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

# Bulk wait times (Enterprise)

Path: FlightQueue API › Airports

`POST /airports/bulk`

Wait estimates for up to 50 airports in one request. Enterprise keys only.

Access: Enterprise only.

## Authentication

Requires one of the following:

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

## Request body

_Required._

- `codes` (`bulkWaitTimes.codes`; array<string>, required) — IATA codes to look up. Invalid codes return a per-item error. Enterprise limit: 50 codes.

## Example request

```json
{
  "codes": [
    "JFK",
    "XX1"
  ]
}
```

## Code samples

### cURL

```bash
curl --request POST \
  --url https://flightqueue.com/api/v1/airports/bulk \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "codes": [
    "JFK",
    "XX1"
  ]
}
'
```

### TypeScript

```typescript
const url = 'https://flightqueue.com/api/v1/airports/bulk';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json', Authorization: 'Bearer <token>'},
  body: JSON.stringify({codes: ['JFK', 'XX1']})
};

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/bulk"

payload = { "codes": ["JFK", "XX1"] }
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 200

Success

#### Example

```json
{
  "success": true,
  "data": {
    "airports": [
      {
        "airportCode": "JFK",
        "security": {
          "estimatedMinutes": 20,
          "range": {
            "min": 15,
            "max": 25
          }
        },
        "checkIn": {
          "estimatedMinutes": 15,
          "range": {
            "min": 10,
            "max": 20
          }
        },
        "immigration": {
          "estimatedMinutes": 18,
          "range": {
            "min": 12,
            "max": 24
          }
        },
        "confidence": 0.8
      },
      {
        "airportCode": "XX1",
        "error": "Invalid IATA code"
      }
    ],
    "total": 2,
    "timestamp": "2026-11-07T12:00:00.000Z"
  },
  "meta": {
    "requestId": "3f8c2b1e-6d4a-4f7b-9a1e-2c5d8e7f0a12",
    "timestamp": "2026-11-07T12:00:00.000Z"
  }
}
```

- `success` (`bulkWaitTimes.response.200.success`; boolean, required)
- `data` (`bulkWaitTimes.response.200.data`; object, required)
  - `airports` (`bulkWaitTimes.response.200.data.airports`; array<any of>, required)
    - any of:
      - `object`
        - `airportCode` (`bulkWaitTimes.response.200.data.airports.1.airportCode`; string, required) — Three-letter IATA airport code, upper case.
          - pattern `^[A-Z]{3}$`
        - `security` (`bulkWaitTimes.response.200.data.airports.1.security`; object, required)
          - `estimatedMinutes` (`bulkWaitTimes.response.200.data.airports.1.security.estimatedMinutes`; number, required)
          - `range` (`bulkWaitTimes.response.200.data.airports.1.security.range`; object, required)
            - `min` (`bulkWaitTimes.response.200.data.airports.1.security.range.min`; number, required) — Lowest estimated wait, in minutes.
            - `max` (`bulkWaitTimes.response.200.data.airports.1.security.range.max`; number, required) — Highest estimated wait, in minutes.
        - `checkIn` (`bulkWaitTimes.response.200.data.airports.1.checkIn`; object, required)
          - `estimatedMinutes` (`bulkWaitTimes.response.200.data.airports.1.checkIn.estimatedMinutes`; number, required)
          - `range` (`bulkWaitTimes.response.200.data.airports.1.checkIn.range`; object, required)
            - `min` (`bulkWaitTimes.response.200.data.airports.1.checkIn.range.min`; number, required) — Lowest estimated wait, in minutes.
            - `max` (`bulkWaitTimes.response.200.data.airports.1.checkIn.range.max`; number, required) — Highest estimated wait, in minutes.
        - `immigration` (`bulkWaitTimes.response.200.data.airports.1.immigration`; object, required)
          - `estimatedMinutes` (`bulkWaitTimes.response.200.data.airports.1.immigration.estimatedMinutes`; number, required)
          - `range` (`bulkWaitTimes.response.200.data.airports.1.immigration.range`; object, required)
            - `min` (`bulkWaitTimes.response.200.data.airports.1.immigration.range.min`; number, required) — Lowest estimated wait, in minutes.
            - `max` (`bulkWaitTimes.response.200.data.airports.1.immigration.range.max`; number, required) — Highest estimated wait, in minutes.
        - `confidence` (`bulkWaitTimes.response.200.data.airports.1.confidence`; number, required) — Model confidence, 0 to 1.
      - `object`
        - `airportCode` (`bulkWaitTimes.response.200.data.airports.2.airportCode`; string, required) — The code as sent in the request.
        - `error` (`bulkWaitTimes.response.200.data.airports.2.error`; string, required)
  - `total` (`bulkWaitTimes.response.200.data.total`; integer, required)
    - min -9007199254740991; max 9007199254740991
  - `timestamp` (`bulkWaitTimes.response.200.data.timestamp`; string, required)
    - 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` (`bulkWaitTimes.response.200.meta`; object, required)
  - `requestId` (`bulkWaitTimes.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` (`bulkWaitTimes.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))$`

### 400

Bad request

#### Example

```json
{
  "success": false,
  "error": {
    "code": "INVALID_BODY",
    "message": "The body is not JSON or the codes array is missing or empty."
  }
}
```

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

### 401

Unauthorized

#### Example

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

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

### 403

Forbidden

#### Example

```json
{
  "success": false,
  "error": {
    "code": "ENTERPRISE_REQUIRED",
    "message": "The key is not an Enterprise key."
  }
}
```

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


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