Задержки FAA
Получайте активные программы задержек Национальной системы воздушного пространства FAA (NAS — гражданское воздушное пространство США) для аэропортов США и территорий США. Используйте общенациональный поток данных для операционных дашбордов, а поток по отдельному аэропорту — для дополнения табло вылетов, оповещений экипажей и уведомлений пассажиров.
Категории задержек:
| Код | Название | Описание |
|---|---|---|
| GDP | Программа наземных задержек (Ground Delay Program) | Дозирование прилётов на объект — включает строки со средней и максимальной задержкой |
| GS | Запрет вылетов (Ground Stop) | Задержка вылетов в направлении конкретного объекта |
| Closure | Закрытие аэропорта/программы | Объект закрыт или работает с ограничениями |
| AFP | Программа управления потоками в воздушном пространстве (Airspace Flow Program) | Перенаправление трафика на уровне ARTCC |
Покрытие ограничено аэропортами под юрисдикцией FAA — континентальная часть США, Аляска, Гавайи, Пуэрто-Рико, Виргинские Острова США, Гуам и другие тихоокеанские территории США. Для контекста задержек за пределами США комбинируйте эти данные со Статусом рейса и операционными данными авиакомпаний.
Важно: массивы в ответе присутствуют всегда, но могут быть пустыми — total_alerts: 0 со строкой message является корректным ответом «нет активных программ», а не ошибкой. Не кэшируйте дольше 2–5 минут — программы GDP и GS меняются практически без предупреждения.
| Эндпоинт | Когда использовать |
|---|---|
GET /delays/faa | Операционная карта — все активные оповещения GDP, GS, закрытия и AFP |
GET /delays/faa/{icao} | Сведения по аэропорту — задержки, затрагивающие один аэропорт США |
Все текущие задержки FAA
Возвращает все активные задержки FAA NAS по всей стране.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/delays/faaQuery-параметров нет. Возвращает текущие программы задержек FAA; данные обновляются при каждом запросе.
Ответ
{
"ground_delays": [
{
"airport": "KSFO",
"airport_name": null,
"reason": "low ceilings",
"avg_delay": "34 minutes",
"max_delay": "1 hour and 25 minutes"
}
],
"ground_stops": [],
"closures": [
{
"airport": "KJFK",
"airport_name": null,
"reason": "!JFK 06/158 JFK AD AP CLSD TO TRANSIENT GA ACFT EXC 24HR PPR ...",
"begin": "Jun 11 at 16:30 UTC.",
"reopen": "Jul 22 at 03:59 UTC."
}
],
"airspace_flow_programs": [],
"total_alerts": 8,
"message": null
}| Поле | Тип | Обязательный | Допускает null | Описание |
|---|---|---|---|---|
ground_delays | array | Да | Никогда | Активные записи GDP |
ground_stops | array | Да | Никогда | Активные запреты вылетов |
closures | array | Да | Никогда | Закрытия аэропортов/программ |
airspace_flow_programs | array | Да | Никогда | Программы управления потоками ARTCC |
total_alerts | integer | Нет | Никогда | Сумма всех строк оповещений (по умолчанию 0) |
message | string | Нет | Да | Текст статуса, когда активных задержек нет |
Наземная задержка (ground_delays[])
| Поле | Тип | Обязательный | Допускает null | Описание |
|---|---|---|---|---|
airport | string | Да | Никогда | Идентификатор аэропорта ICAO или FAA |
airport_name | string | Нет | Да | Название аэропорта, если указано |
reason | string | Да | Никогда | Причина задержки (часто погода или объём трафика) |
avg_delay | string | Нет | Да | Средняя продолжительность задержки (в удобочитаемом виде) |
max_delay | string | Нет | Да | Максимальная продолжительность задержки |
Запрет вылетов (ground_stops[])
| Поле | Тип | Обязательный | Допускает null | Описание |
|---|---|---|---|---|
airport | string | Да | Никогда | Затронутый аэропорт |
airport_name | string | Нет | Да | Название аэропорта, если доступно |
reason | string | Да | Никогда | Причина запрета |
end_time | string | Нет | Да | Ожидаемое время окончания (UTC) |
Закрытие (closures[])
| Поле | Тип | Обязательный | Допускает null | Описание |
|---|---|---|---|---|
airport | string | Да | Никогда | Затронутый аэропорт |
airport_name | string | Нет | Да | Название аэропорта, если доступно |
reason | string | Да | Никогда | Причина закрытия (часто включает текст NOTAM) |
begin | string | Нет | Да | Начало закрытия (UTC, в удобочитаемом виде) |
reopen | string | Нет | Да | Ожидаемое время открытия |
Программа управления потоками в воздушном пространстве (airspace_flow_programs[])
| Поле | Тип | Обязательный | Допускает null | Описание |
|---|---|---|---|---|
facility | string | Да | Никогда | Идентификатор органа УВД (ARTCC — районный диспетчерский центр), а не код аэропорта |
reason | string | Да | Никогда | Причина программы |
fca_start | string | Нет | Да | Начало зоны ограничения потока (FCA) |
fca_end | string | Нет | Да | Конец зоны ограничения потока (FCA) |
Важно: программы управления потоками используют facility (ARTCC), а не код аэропорта — чётко подписывайте их в интерфейсе, чтобы пользователи не путали строки AFP с задержками конкретного аэропорта.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Response Body
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/delays/faa"{
"ground_delays": [
{
"airport": "KEWR",
"reason": "WEATHER / THUNDERSTORMS",
"avg_delay": "1 hour and 30 minutes",
"max_delay": "2 hours"
}
],
"ground_stops": [],
"closures": [],
"airspace_flow_programs": [],
"total_alerts": 1
}Задержки для конкретного аэропорта
Возвращает активные задержки FAA, отфильтрованные по конкретному аэропорту США по коду ICAO. Программы управления потоками (уровня ARTCC) включаются полностью, поскольку они могут косвенно влиять на запрошенный аэропорт.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/delays/faa/{icao}| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
icao | string | Да | 4-буквенный код ICAO аэропорта США (например, KJFK) |
Ответ
Та же структура, что и в разделе Все текущие задержки FAA, но массивы отфильтрованы по запрошенному аэропорту (плюс соответствующие строки AFP).
{
"ground_delays": [],
"ground_stops": [],
"closures": [
{
"airport": "KJFK",
"airport_name": null,
"reason": "!JFK 06/158 JFK AD AP CLSD TO TRANSIENT GA ACFT EXC 24HR PPR ...",
"begin": "Jun 11 at 16:30 UTC.",
"reopen": "Jul 22 at 03:59 UTC."
}
],
"airspace_flow_programs": [],
"total_alerts": 1,
"message": null
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
4-letter ICAO airport code (e.g. KJFK)
4 <= length <= 4Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/delays/faa/KJFK"{
"ground_delays": [
{
"airport": "string",
"airport_name": "string",
"reason": "string",
"avg_delay": "string",
"max_delay": "string"
}
],
"ground_stops": [
{
"airport": "string",
"airport_name": "string",
"reason": "string",
"end_time": "string"
}
],
"closures": [
{
"airport": "string",
"airport_name": "string",
"reason": "string",
"begin": "string",
"reopen": "string"
}
],
"airspace_flow_programs": [
{
"facility": "string",
"reason": "string",
"fca_start": "string",
"fca_end": "string"
}
],
"total_alerts": 0,
"message": "string"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Клиентские типы
"""FAA NAS delay response models for /delays/faa endpoints."""from __future__ import annotationsfrom dataclasses import dataclassfrom typing import Literal@dataclassclass GroundDelay: airport: str reason: str airport_name: str | None = None avg_delay: str | None = None max_delay: str | None = None@dataclassclass GroundStop: airport: str reason: str airport_name: str | None = None end_time: str | None = None@dataclassclass Closure: airport: str reason: str airport_name: str | None = None begin: str | None = None reopen: str | None = None@dataclassclass AirspaceFlowProgram: facility: str reason: str fca_start: str | None = None fca_end: str | None = None@dataclassclass FaaDelayResponse: ground_delays: list[GroundDelay] ground_stops: list[GroundStop] closures: list[Closure] airspace_flow_programs: list[AirspaceFlowProgram] total_alerts: int = 0 message: str | None = NoneDelayKind = Literal["GDP", "GS", "Closure", "AFP"]@dataclassclass DelayAlert: kind: DelayKind airport: str reason: str avg_delay: str | None max_delay: str | NoneИнтеграция
Опрашивайте задержки FAA по аэропорту и сводите их в единый список оповещений для табло вылетов.
Пример ниже кэширует ответы на 2 минуты, потому что во время погодных явлений программы задержек меняются часто. Каждый запрос использует явные тайм-ауты (10 с на подключение / 20 с на чтение). Вспомогательная функция объединяет строки GDP, GS, закрытий и AFP в единый список DelayAlert для отрисовки бейджей.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}DELAY_TTL = 120 # 2 min - FAA feed is real-time@dataclassclass DelayAlert: kind: str airport: str reason: str avg_delay: str | None max_delay: str | Nonedef fetch_faa_delays(icao: str | None = None) -> dict: key = f"delays:{icao or 'all'}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] path = f"{BASE}/delays/faa/{icao.upper()}" if icao else f"{BASE}/delays/faa" try: r = requests.get(path, headers=HEADERS, timeout=(10, 20)) except requests.Timeout as exc: raise RuntimeError("SkyLink timeout fetching FAA delays") from exc r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + DELAY_TTL) return datadef delay_alerts(icao: str | None = None) -> list[DelayAlert]: data = fetch_faa_delays(icao) alerts: list[DelayAlert] = [] for item in data.get("ground_delays", []): alerts.append( DelayAlert( kind="GDP", airport=item["airport"], reason=item["reason"], avg_delay=item.get("avg_delay"), max_delay=item.get("max_delay"), ) ) for item in data.get("ground_stops", []): alerts.append( DelayAlert(kind="GS", airport=item["airport"], reason=item["reason"], avg_delay=None, max_delay=None) ) for item in data.get("closures", []): alerts.append( DelayAlert(kind="Closure", airport=item["airport"], reason=item["reason"], avg_delay=None, max_delay=None) ) for item in data.get("airspace_flow_programs", []): alerts.append( DelayAlert( kind="AFP", airport=item["facility"], reason=item["reason"], avg_delay=None, max_delay=None, ) ) return alertsif __name__ == "__main__": import json delays = fetch_faa_delays("KJFK") print(json.dumps(delays, indent=2, default=str))Примечания по реализации
Продолжительность в удобочитаемом виде. avg_delay и max_delay — строки (например, "34 minutes"): разбирайте их с осторожностью или показывайте как есть.
Пустые ответы. total_alerts: 0 с заполненным message может означать, что активных программ по стране нет, — показывайте пустое состояние, а не баннер с ошибкой.
Ответы с ошибками
Общие ошибки платформы: Обработка ошибок. Специфичные для эндпоинта:
422 — некорректная длина кода ICAO
{
"detail": [
{
"type": "string_too_short",
"loc": ["path", "icao"],
"msg": "String should have at least 4 characters"
}
]
}Руководства по интеграции
| Руководство | Содержание |
|---|---|
| NOTAM | Сводная таблица, фильтр по аэродрому, предполётная проверка |
| Задержки FAA | Сканирование по всей стране, дашборд хаба |
| Обработка ошибок | Пустые массивы, покрытие только США |
| Кэширование и мониторинг | TTL: 5 мин для NOTAM / 2 мин для FAA |
См. также: NOTAM · Статус рейса · Расписания