# Детали отдельного рейса

Получение полных архивных метаданных рейса по UUID flight_id — аэропорты, время, расстояние и достоверность маршрута из архива ADS-B.



Получите полные метаданные и весь трек позиций конкретного архивного рейса. Оба эндпоинта требуют UUID `flight_id` из [поиска по истории рейсов](/docs/v31/historical-adsb-flight-search) — это второй шаг того же рабочего процесса. Уровни тарифов: [раздел «Исторические данные 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>

<DocJumpNav>
  <DocJumpLink href="#flight-detail" icon="solar:document-bold-duotone">
    Детали рейса
  </DocJumpLink>

  <DocJumpLink href="#flight-track" icon="solar:route-bold-duotone">
    Трек рейса
  </DocJumpLink>
</DocJumpNav>

<a id="flight-detail" />

## Детали отдельного рейса [#single-flight-detail]

Возвращает расширенные метаданные сверх результатов поиска — время отхода от стоянки и прибытия на стоянку (off-block/on-block), близость к аэропорту прибытия и служебные временные метки. **Блочное время** — время от стоянки до стоянки, включая руление; off-block — уход от гейта, on-block — прибытие к гейту. **Взлёт** и **посадка** — моменты отрыва и касания колёс, отличные от off-block/on-block.

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

<DocApiPath method="GET" path="/ultra/history/flight/{flight_id}" />

| Параметр    | Тип    | Обязательный | Описание                                                                          |
| ----------- | ------ | ------------ | --------------------------------------------------------------------------------- |
| `flight_id` | string | Да           | UUID рейса из [поиска по истории рейсов](/docs/v31/historical-adsb-flight-search) |

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

  Те же параметры и та же структура ответа, что и у ULTRA. Требуется тариф **Ultra** или **Mega**. Значения `flight_id` взаимозаменяемы между уровнями.
</DocDetails>

### Ответ [#response]

```json
{
  "flight_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "icao24": "40621d",
  "callsign": "BAW178",
  "flight_number": "BAW178",
  "tail_number": "G-XWBA",
  "aircraft_type_icao": "B77W",
  "aircraft_type_name": "Boeing 777-300ER",
  "airline_icao": "BAW",
  "airline_iata": "BA",
  "airline_name": "British Airways",
  "departure_airport_icao": "EGLL",
  "departure_airport_iata": "LHR",
  "departure_airport_name": "London Heathrow Airport",
  "arrival_airport_icao": "KJFK",
  "arrival_airport_iata": "JFK",
  "arrival_airport_name": "John F Kennedy International Airport",
  "flight_state": "ARCHIVED",
  "flight_start": "2026-05-12T19:42:05Z",
  "flight_end": "2026-05-13T03:11:10Z",
  "takeoff_time": "2026-05-12T19:45:00Z",
  "landing_time": "2026-05-13T03:08:00Z",
  "off_block_time": null,
  "on_block_time": null,
  "flight_duration_min": 443.0,
  "duration_source": "estimated",
  "distance_nm": 2998.4,
  "arrival_distance_nm": 2.1,
  "confidence": 1.0,
  "route_source": "vrs_confirmed",
  "gps_spoofing_suspected": false,
  "diversion_suspected": false,
  "created_at": "2026-05-12T19:40:00Z",
  "updated_at": "2026-05-13T03:15:00Z"
}
```

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

| Поле                                                                                        | Тип            | Обязательный | Null?  | Описание                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------------------- | -------------- | ------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *(все поля [сводки рейса](/docs/v31/historical-adsb-flight-search#flight-summary-flights))* | -              | -            | -      | Та же структура, что и в результатах поиска                                                                                                                                                                 |
| `off_block_time`                                                                            | string \| null | Нет          | **Да** | Время отхода от стоянки, если известно (ISO 8601)                                                                                                                                                           |
| `on_block_time`                                                                             | string \| null | Нет          | **Да** | Время прибытия на стоянку, если известно (ISO 8601)                                                                                                                                                         |
| `duration_source`                                                                           | string \| null | Нет          | **Да** | Способ вычисления длительности — при значении `"estimated"` блочное время выведено из данных о позициях, а не из зарегистрированных событий у гейта (важно для процессов ESG-отчётности или учёта задержек) |
| `arrival_distance_nm`                                                                       | number \| null | Нет          | **Да** | Расстояние от последней позиции до аэропорта прибытия (nm)                                                                                                                                                  |
| `created_at`                                                                                | string \| null | Нет          | **Да** | Время создания архивной записи (ISO 8601)                                                                                                                                                                   |
| `updated_at`                                                                                | string \| null | Нет          | **Да** | Время последнего обновления архивной записи (ISO 8601)                                                                                                                                                      |

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

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

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

Получите расширенные метаданные отдельного архивного рейса — время off-block/on-block, близость к аэропорту прибытия и служебные временные метки. Пример ниже продолжает результат поиска рейсов: берёт первый `flight_id`, запрашивает полные детали, а затем преобразует время у гейта в объект для отображения с запасным вариантом на случай, когда блочное время равно `null`.

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

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

**Начинайте с поиска.** Всегда сначала получайте `flight_id` через [поиск по истории рейсов](/docs/v31/historical-adsb-flight-search) — подбор UUID наугад вернёт `404`. Детали и поиск используют один и тот же путь уровня (`/ultra/...` или `/mega/...`).

**Блочное время и взлёт/посадка.** `off_block_time` и `on_block_time` — события у гейта; `takeoff_time` и `landing_time` — отрыв и касание колёс. Оба значения могут быть `null`, если покрытие [ADS-B](https://www.faa.gov/air_traffic/technology/adsb) у гейта было неполным.

**Необработанная история позиций.** Для временной шкалы в заданном интервале без разбиения на рейсы см. [историю позиций](/docs/v31/historical-adsb-positions).

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

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

### 404 — рейс не найден [#404--flight-not-found]

```json
{
  "detail": "Flight not found"
}
```

Возвращается, если `flight_id` отсутствует в архиве (неизвестный UUID, данные за пределами срока хранения или опечатка). Повторите поиск с более узким временным окном — см. [поиск по истории рейсов](/docs/v31/historical-adsb-flight-search).

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

<a id="flight-track" />

## Трек рейса [#flight-track]

Возвращает полный трек позиций [ADS-B](https://www.faa.gov/air_traffic/technology/adsb) для конкретного рейса, автоматически ограниченный окном от взлёта до посадки (с запасом 5 минут с каждой стороны). Используйте этот эндпоинт, когда у вас есть `flight_id` из поиска и нужна траектория без самостоятельного расчёта временного окна.

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

<DocApiPath method="GET" path="/ultra/history/flight/{flight_id}/track" />

| Параметр    | Тип     | Обязательный | По умолчанию | Описание                                                            |
| ----------- | ------- | ------------ | ------------ | ------------------------------------------------------------------- |
| `flight_id` | string  | Да           | -            | UUID рейса из поиска                                                |
| `limit`     | integer | Нет          | `2000`       | Максимальное число строк позиций (не более **5000** для пути ULTRA) |

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

  | Параметр    | Тип     | Обязательный | По умолчанию | Описание                                                       |
  | ----------- | ------- | ------------ | ------------ | -------------------------------------------------------------- |
  | `flight_id` | string  | Да           | -            | UUID рейса                                                     |
  | `limit`     | integer | Нет          | `5000`       | Максимальное число позиций (не более **10 000** для пути MEGA) |

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

### Ответ [#response-1]

```json
{
  "flight_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "icao24": "40621d",
  "callsign": "BAW178",
  "registration": "G-XWBA",
  "aircraft_type_icao": "B77W",
  "departure_airport_icao": "EGLL",
  "departure_airport_iata": "LHR",
  "arrival_airport_icao": "KJFK",
  "arrival_airport_iata": "JFK",
  "takeoff_time": "2026-05-12T19:45:00Z",
  "landing_time": "2026-05-13T03:08:00Z",
  "count": 1287,
  "positions": [
    {
      "timestamp": "2026-05-13T03:08:05Z",
      "icao24": "40621d",
      "latitude": 40.6413,
      "longitude": -73.7781,
      "altitude_baro": 0,
      "ground_speed": 12,
      "track": 90,
      "vertical_rate": 0,
      "callsign": "BAW178",
      "is_on_ground": true,
      "registration": "G-XWBA",
      "aircraft_type": "B77W",
      "gps_spoofed": false
    }
  ]
}
```

| Поле                     | Тип            | Обязательный | Null?   | Описание                                      |
| ------------------------ | -------------- | ------------ | ------- | --------------------------------------------- |
| `flight_id`              | string         | **Да**       | Никогда | UUID рейса                                    |
| `icao24`                 | string \| null | Нет          | **Да**  | Шестнадцатеричный код ВС                      |
| `callsign`               | string \| null | Нет          | **Да**  | Позывной ADS-B                                |
| `registration`           | string \| null | Нет          | **Да**  | Бортовой номер, если известен                 |
| `aircraft_type_icao`     | string \| null | Нет          | **Да**  | Код типа ICAO                                 |
| `departure_airport_icao` | string \| null | Нет          | **Да**  | Код ICAO аэропорта вылета                     |
| `departure_airport_iata` | string \| null | Нет          | **Да**  | Код IATA аэропорта вылета                     |
| `arrival_airport_icao`   | string \| null | Нет          | **Да**  | Код ICAO аэропорта прибытия                   |
| `arrival_airport_iata`   | string \| null | Нет          | **Да**  | Код IATA аэропорта прибытия                   |
| `takeoff_time`           | string \| null | Нет          | **Да**  | Время взлёта, ограничивающее трек (ISO 8601)  |
| `landing_time`           | string \| null | Нет          | **Да**  | Время посадки, ограничивающее трек (ISO 8601) |
| `count`                  | integer        | **Да**       | Никогда | Количество элементов в `positions`            |
| `positions`              | array          | **Да**       | Никогда | Снимки позиций (сначала самые новые)          |

<a id="position-snapshot-positions" />

#### Снимок позиции (`positions[]`) [#position-snapshot-positions]

Те же имена полей, что и у позиций [ADS-B в реальном времени](/docs/v31/adsb). Путь в JSON: `positions[]`.

| Поле            | Тип             | Обязательный | Null?   | Описание                                                           |
| --------------- | --------------- | ------------ | ------- | ------------------------------------------------------------------ |
| `timestamp`     | string          | **Да**       | Никогда | Время наблюдения (ISO 8601)                                        |
| `icao24`        | string          | **Да**       | Никогда | Шестнадцатеричный код ВС                                           |
| `latitude`      | number          | **Да**       | Никогда | Широта WGS-84 (десятичные градусы)                                 |
| `longitude`     | number          | **Да**       | Никогда | Долгота WGS-84 (десятичные градусы)                                |
| `altitude_baro` | number \| null  | Нет          | **Да**  | Барометрическая высота в футах над MSL                             |
| `ground_speed`  | number \| null  | Нет          | **Да**  | Путевая скорость в узлах                                           |
| `track`         | number \| null  | Нет          | **Да**  | Путевой угол в градусах (истинный)                                 |
| `vertical_rate` | number \| null  | Нет          | **Да**  | Вертикальная скорость в футах в минуту                             |
| `callsign`      | string \| null  | Нет          | **Да**  | Позывной ADS-B в момент снимка                                     |
| `is_on_ground`  | boolean         | **Да**       | Никогда | `true`, если ВС находилось на земле                                |
| `registration`  | string \| null  | Нет          | **Да**  | Бортовой номер, если известен                                      |
| `aircraft_type` | string \| null  | Нет          | **Да**  | Код типа ICAO, если известен                                       |
| `gps_spoofed`   | boolean \| null | Нет          | **Да**  | Был ли этот снимок помечен как подвергшийся подмене GPS (спуфингу) |

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

Воспроизведите трек позиций от стоянки до стоянки на карте. Пример ниже продолжает результат поиска: берёт `flight_id`, запрашивает трек с таймаутом чтения 45 секунд (большие треки могут загружаться медленно), прореживает данные до каждой 5-й позиции ради производительности веб-карты и обрабатывает `404`, если рейс вышел за пределы срока хранения.

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

**Важно:** трек и история позиций возвращают `positions` в порядке от новых к старым. Для воспроизведения на карте разверните их в хронологическом порядке. При интервале выборки 5 секунд 10-часовой полёт — это \~7200 точек; для веб-карт прореживайте данные.

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