# Трафик аэропорта

Исторические прилёты и вылеты аэропорта из архива ADS-B с фильтрацией по направлению в настраиваемом временном окне.



Восстанавливайте исторические прилёты и вылеты в аэропорту за заданное временное окно. Используйте этот эндпоинт для операционной аналитики, планирования пропускной способности и дашбордов эффективности авиакомпаний, но не для расписаний в реальном времени (см. [Расписания](/docs/v31/schedules)).

Уровни тарифов: [главная страница исторических данных ADS-B](/docs/v31/historical-adsb).

<DocRequirements>
  <DocRequirementAuth />

  <DocRequirement label="Тариф" href="/docs/rate-limits#historical-adsb-path-tiers">
    <strong>Pro</strong>, <strong>Ultra</strong> или <strong>Mega</strong> — используйте префикс пути, соответствующий нужному окну.
  </DocRequirement>
</DocRequirements>

## Запрос [#request]

<DocApiPath method="GET" path="/ultra/history/airport/{icao}/traffic" />

| Параметр    | Тип     | Обязательный | По умолчанию | Описание                                                               |
| ----------- | ------- | ------------ | ------------ | ---------------------------------------------------------------------- |
| `icao`      | string  | Да           | -            | ICAO-код аэропорта (4 символа)                                         |
| `start`     | string  | Нет          | 24 ч назад   | Начало окна — ISO 8601                                                 |
| `end`       | string  | Нет          | сейчас       | Конец окна — ISO 8601                                                  |
| `direction` | string  | Нет          | `both`       | `dep`, `arr` или `both`                                                |
| `limit`     | integer | Нет          | `100`        | Макс. количество возвращаемых рейсов (не более **1000** на пути ULTRA) |

Окно запроса не может превышать **90 дней** на `/ultra/history/...`.

<DocDetails title="Путь MEGA (`/mega/history/...`)">
  <DocApiPath method="GET" path="/mega/history/airport/{icao}/traffic" />

  | Параметр    | Тип     | Обязательный | По умолчанию | Описание                                                              |
  | ----------- | ------- | ------------ | ------------ | --------------------------------------------------------------------- |
  | `icao`      | string  | Да           | -            | ICAO-код аэропорта                                                    |
  | `start`     | string  | Нет          | 24 ч назад   | Начало окна — ISO 8601 (на пути MEGA охват не более **365 дней**)     |
  | `end`       | string  | Нет          | сейчас       | Конец окна                                                            |
  | `direction` | string  | Нет          | `both`       | `dep`, `arr` или `both`                                               |
  | `limit`     | integer | Нет          | `200`        | Макс. количество возвращаемых рейсов (не более **2000** на пути MEGA) |

  Требуется тариф **Ultra** или **Mega**. Структура ответа та же, что и для ULTRA.
</DocDetails>

## Ответ [#response]

```json
{
  "icao": "EGLL",
  "direction": "both",
  "count": 1,
  "flights": [
    {
      "flight_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "icao24": "4006f2",
      "callsign": "BAW117",
      "flight_number": "BAW117",
      "aircraft_type_icao": "B77W",
      "airline_name": "British Airways",
      "departure_airport_icao": "EGLL",
      "departure_airport_iata": "LHR",
      "arrival_airport_icao": "KJFK",
      "arrival_airport_iata": "JFK",
      "flight_state": "ARCHIVED",
      "takeoff_time": "2026-05-12T09:10:00Z",
      "landing_time": "2026-05-12T09:28:00Z",
      "flight_duration_min": 18.0,
      "distance_nm": 205.7
    }
  ]
}
```

| Поле        | Тип     | Обязательный | Описание                                     |
| ----------- | ------- | ------------ | -------------------------------------------- |
| `icao`      | string  | **Да**       | ICAO-код запрошенного аэропорта              |
| `direction` | string  | **Да**       | Применённый фильтр — `dep`, `arr` или `both` |
| `count`     | integer | **Да**       | Количество элементов в `flights`             |
| `flights`   | array   | **Да**       | Подходящие прилёты и вылеты                  |

<a id="traffic-flight-flights" />

### Рейс в трафике (`flights[]`) [#traffic-flight-flights]

Каждый элемент использует те же поля аэропортов и времени, что и [сводка рейса](/docs/v31/historical-adsb-flight-search#flight-summary-flights).

| Поле                     | Тип            | Обязательный | Null?   | Описание                                             |
| ------------------------ | -------------- | ------------ | ------- | ---------------------------------------------------- |
| `flight_id`              | string         | **Да**       | Никогда | UUID для запросов деталей и трека                    |
| `icao24`                 | string \| null | Нет          | **Да**  | Hex-код воздушного судна                             |
| `callsign`               | string \| null | Нет          | **Да**  | Позывной ADS-B                                       |
| `flight_number`          | string \| null | Нет          | **Да**  | Нормализованный номер рейса, если удалось определить |
| `aircraft_type_icao`     | string \| null | Нет          | **Да**  | Код типа ICAO                                        |
| `airline_name`           | string \| null | Нет          | **Да**  | Отображаемое название авиакомпании                   |
| `departure_airport_icao` | string \| null | Нет          | **Да**  | ICAO-код аэропорта вылета                            |
| `departure_airport_iata` | string \| null | Нет          | **Да**  | IATA-код аэропорта вылета                            |
| `arrival_airport_icao`   | string \| null | Нет          | **Да**  | ICAO-код аэропорта прилёта                           |
| `arrival_airport_iata`   | string \| null | Нет          | **Да**  | IATA-код аэропорта прилёта                           |
| `flight_state`           | string \| null | Нет          | **Да**  | Состояние в архиве (например, `ARCHIVED`)            |
| `takeoff_time`           | string \| null | Нет          | **Да**  | Время взлёта (ISO 8601)                              |
| `landing_time`           | string \| null | Нет          | **Да**  | Время посадки (ISO 8601)                             |
| `flight_duration_min`    | number \| null | Нет          | **Да**  | Продолжительность в минутах                          |
| `distance_nm`            | number \| null | Нет          | **Да**  | Расстояние в морских милях                           |

## Клиентские типы [#client-types]

<DocClientTypes id="v31/historical-adsb/history-types" />

## Интеграция [#integration]

Восстановите прилёты и вылеты в хабовом аэропорту за выбранное временное окно. Пример ниже получает трафик в обоих направлениях за 48 часов в EGLL, отбирает только вылеты и группирует их по авиакомпаниям. Для скользящих 90-дневных окон, которым нужны `direction: arr` и `limit: 2000` на пакет, переходите на путь MEGA.

<DocExample id="v31/historical-adsb/airport-traffic-fetch" />

### Примечания по реализации [#implementation-notes]

**Важно:** при `direction: both` определяйте направление движения, сравнивая `departure_airport_icao` и `arrival_airport_icao` с запрошенным `icao`: если `departure_airport_icao` совпадает с запрошенным аэропортом, это вылет; если с ним совпадает `arrival_airport_icao`, это прилёт. Не полагайтесь на порядок элементов в списке.

**Фильтрация по направлению.** Запрашивайте `dep` или `arr` вместо `both`, когда нужен только один тип движения, — ответ будет меньше, и его проще разбивать на страницы.

**Пагинация.** Если `count` равен запрошенному `limit`, сузьте окно `start`/`end` или увеличьте `limit` (до 1000 на ULTRA, до 2000 на MEGA) и объедините результаты перекрывающихся окон.

## Ответы с ошибками [#error-responses]

Ограничение по тарифу `401`/`403`: [главная страница исторических данных ADS-B](/docs/v31/historical-adsb#error-responses). Ошибки, специфичные для эндпоинта:

### 422 — слишком широкое окно [#422--window-too-wide]

Возвращается, если интервал `start`/`end` превышает максимум для пути — **90 дней** на `/ultra/history/...` или **365 дней** на `/mega/history/...`:

```json
{
  "detail": "Query window exceeds maximum of 90 days for your plan on /ultra/history/..."
}
```

<APIPage document="&#x22;https://api.skylinkapi.com/v3.1/openapi.json&#x22;" operations="[{&#x22;path&#x22;:&#x22;/ultra/history/airport/{icao}/traffic&#x22;,&#x22;method&#x22;:&#x22;get&#x22;},{&#x22;path&#x22;:&#x22;/mega/history/airport/{icao}/traffic&#x22;,&#x22;method&#x22;:&#x22;get&#x22;}]" />
